MCPcopy Create free account
hub / github.com/SplootCode/splootcode / serializeTypeExpression

Function serializeTypeExpression

scripts/generateLibs.ts:157–214  ·  view source on GitHub ↗
(typeNode: ts.TypeNode)

Source from the content-addressed store, hash-verified

155 }
156
157 function serializeTypeExpression(typeNode: ts.TypeNode): TypeExpression {
158 if (ts.isUnionTypeNode(typeNode)) {
159 return {
160 type: 'union',
161 unionOrIntersectionList: typeNode.types.map((childTypeNode) => {
162 return serializeTypeExpression(childTypeNode)
163 }),
164 }
165 } else if (ts.isIntersectionTypeNode(typeNode)) {
166 return {
167 type: 'intersection',
168 unionOrIntersectionList: typeNode.types.map((childTypeNode) => {
169 return serializeTypeExpression(childTypeNode)
170 }),
171 }
172 } else if (ts.isTypeReferenceNode(typeNode)) {
173 const type = checker.getTypeFromTypeNode(typeNode)
174 serializeType(type)
175
176 // Note: I am ignoring type arguments e.g. HTMLCollectionOf<HTMLScriptElement>
177 // This will come through as a plain HTMLCollectionOf.
178 // TODO: Parse typeNode.typeArguments into something useful.
179 return { type: 'reference', reference: typeNode.typeName.getText() }
180 } else if (ts.isParenthesizedTypeNode(typeNode)) {
181 const parType = typeNode as ts.ParenthesizedTypeNode
182 return serializeTypeExpression(parType.type)
183 } else if (ts.isFunctionTypeNode(typeNode)) {
184 const funcType = typeNode as ts.FunctionTypeNode
185 return { type: 'function', function: serializeFunctionTypeExpression(funcType) }
186 } else if (ts.isTypeLiteralNode(typeNode)) {
187 return { type: 'literal', literal: typeNode.getText() }
188 } else if (ts.isArrayTypeNode(typeNode)) {
189 return { type: 'array' }
190 } else if (ts.isThisTypeNode(typeNode)) {
191 return { type: 'this' }
192 } else if (typeNode.kind === ts.SyntaxKind.NumberKeyword) {
193 return { type: 'reference', reference: 'Number' }
194 } else if (typeNode.kind === ts.SyntaxKind.StringKeyword) {
195 return { type: 'reference', reference: 'String' }
196 } else if (typeNode.kind === ts.SyntaxKind.BooleanKeyword) {
197 return { type: 'reference', reference: 'Boolean' }
198 } else if (typeNode.kind === ts.SyntaxKind.UnknownKeyword) {
199 return { type: 'unknown' }
200 } else if (typeNode.kind === ts.SyntaxKind.UndefinedKeyword) {
201 return { type: 'undefined' }
202 } else if (typeNode.kind === ts.SyntaxKind.NullKeyword) {
203 return { type: 'null' }
204 } else if (typeNode.kind === ts.SyntaxKind.AnyKeyword) {
205 return { type: 'any' }
206 } else if (typeNode.kind === ts.SyntaxKind.VoidKeyword) {
207 return { type: 'void' }
208 } else {
209 console.log('???', ts.SyntaxKind[typeNode.kind])
210 console.log(typeNode.getText())
211 }
212
213 return { type: 'any' }
214 }

Callers 5

visitFunction · 0.85
serializeAliasTypeFunction · 0.85
serializeTypeFunction · 0.85

Calls 2

serializeTypeFunction · 0.85

Tested by

no test coverage detected