MCPcopy Index your code
hub / github.com/nodejs/node / createMappedTypeNodeFromType

Function createMappedTypeNodeFromType

test/fixtures/snapshot/typescript.js:52680–52712  ·  view source on GitHub ↗
(type)

Source from the content-addressed store, hash-verified

52678 return typeToTypeNodeHelper(type, context);
52679 }
52680 function createMappedTypeNodeFromType(type) {
52681 ts.Debug.assert(!!(type.flags & 524288 /* TypeFlags.Object */));
52682 var readonlyToken = type.declaration.readonlyToken ? ts.factory.createToken(type.declaration.readonlyToken.kind) : undefined;
52683 var questionToken = type.declaration.questionToken ? ts.factory.createToken(type.declaration.questionToken.kind) : undefined;
52684 var appropriateConstraintTypeNode;
52685 var newTypeVariable;
52686 if (isMappedTypeWithKeyofConstraintDeclaration(type)) {
52687 // We have a { [P in keyof T]: X }
52688 // We do this to ensure we retain the toplevel keyof-ness of the type which may be lost due to keyof distribution during `getConstraintTypeFromMappedType`
52689 if (!(getModifiersTypeFromMappedType(type).flags & 262144 /* TypeFlags.TypeParameter */) && context.flags & 4 /* NodeBuilderFlags.GenerateNamesForShadowedTypeParams */) {
52690 var newParam = createTypeParameter(createSymbol(262144 /* SymbolFlags.TypeParameter */, "T"));
52691 var name = typeParameterToName(newParam, context);
52692 newTypeVariable = ts.factory.createTypeReferenceNode(name);
52693 }
52694 appropriateConstraintTypeNode = ts.factory.createTypeOperatorNode(140 /* SyntaxKind.KeyOfKeyword */, newTypeVariable || typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context));
52695 }
52696 else {
52697 appropriateConstraintTypeNode = typeToTypeNodeHelper(getConstraintTypeFromMappedType(type), context);
52698 }
52699 var typeParameterNode = typeParameterToDeclarationWithConstraint(getTypeParameterFromMappedType(type), context, appropriateConstraintTypeNode);
52700 var nameTypeNode = type.declaration.nameType ? typeToTypeNodeHelper(getNameTypeFromMappedType(type), context) : undefined;
52701 var templateTypeNode = typeToTypeNodeHelper(removeMissingType(getTemplateTypeFromMappedType(type), !!(getMappedTypeModifiers(type) & 4 /* MappedTypeModifiers.IncludeOptional */)), context);
52702 var mappedTypeNode = ts.factory.createMappedTypeNode(readonlyToken, typeParameterNode, nameTypeNode, questionToken, templateTypeNode, /*members*/ undefined);
52703 context.approximateLength += 10;
52704 var result = ts.setEmitFlags(mappedTypeNode, 1 /* EmitFlags.SingleLine */);
52705 if (isMappedTypeWithKeyofConstraintDeclaration(type) && !(getModifiersTypeFromMappedType(type).flags & 262144 /* TypeFlags.TypeParameter */) && context.flags & 4 /* NodeBuilderFlags.GenerateNamesForShadowedTypeParams */) {
52706 // homomorphic mapped type with a non-homomorphic naive inlining
52707 // wrap it with a conditional like `SomeModifiersType extends infer U ? {..the mapped type...} : never` to ensure the resulting
52708 // type stays homomorphic
52709 return ts.factory.createConditionalTypeNode(typeToTypeNodeHelper(getModifiersTypeFromMappedType(type), context), ts.factory.createInferTypeNode(ts.factory.createTypeParameterDeclaration(/*modifiers*/ undefined, ts.factory.cloneNode(newTypeVariable.typeName))), result, ts.factory.createKeywordTypeNode(143 /* SyntaxKind.NeverKeyword */));
52710 }
52711 return result;
52712 }
52713 function createAnonymousTypeNode(type) {
52714 var _a;
52715 var typeId = type.id;

Callers 1

Tested by

no test coverage detected

Used in the wild real call sites across dependent graphs

searching dependent graphs…