(expression: ts.Expression, typeChecker: ts.TypeChecker)
| 362 | } |
| 363 | |
| 364 | export function resolveTypeOfExpression(expression: ts.Expression, typeChecker: ts.TypeChecker): ResolvedType { |
| 365 | let effectiveType: SymbolType | undefined; |
| 366 | let effectiveObjectInfo: SymbolObjectInfo | undefined; |
| 367 | let isNullable = false; |
| 368 | |
| 369 | const resolvedSymbols = resolvedSymbolsOfExpression(expression, typeChecker); |
| 370 | |
| 371 | for (const resolvedSymbol of resolvedSymbols) { |
| 372 | if (resolvedSymbol.type === SymbolType.any) { |
| 373 | effectiveType = SymbolType.any; |
| 374 | } else if (resolvedSymbol.type === SymbolType.undefined || resolvedSymbol.type === SymbolType.null) { |
| 375 | isNullable = true; |
| 376 | } else { |
| 377 | if (effectiveType === undefined) { |
| 378 | effectiveType = resolvedSymbol.type; |
| 379 | effectiveObjectInfo = resolvedSymbol.objectInfo; |
| 380 | } else { |
| 381 | effectiveType = SymbolType.any; |
| 382 | } |
| 383 | } |
| 384 | } |
| 385 | |
| 386 | if (effectiveType === undefined) { |
| 387 | effectiveType = SymbolType.any; |
| 388 | } |
| 389 | |
| 390 | if (effectiveType === SymbolType.any) { |
| 391 | isNullable = true; |
| 392 | effectiveObjectInfo = undefined; |
| 393 | } |
| 394 | |
| 395 | return { effectiveType, isNullable, resolvedSymbols, effectiveObjectInfo }; |
| 396 | } |
| 397 | |
| 398 | export class Transpiler { |
| 399 | readonly diagnostics: ts.Diagnostic[] = []; |
no test coverage detected