tsc-ts 0.0.10 → 0.1.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/bin/tsc-ts.js +70 -1
- package/dist/api/compiler/ast-utilities.d.ts +19 -1
- package/dist/api/compiler/ast-utilities.js +180 -95
- package/dist/api/compiler/ast.d.ts +29 -18
- package/dist/api/compiler/ast.js +1040 -1007
- package/dist/api/compiler/astnav.js +15 -15
- package/dist/api/compiler/binder-utilities.js +186 -186
- package/dist/api/compiler/binder.js +290 -263
- package/dist/api/compiler/character-codes.js +2 -2
- package/dist/api/compiler/checker-calls.js +173 -123
- package/dist/api/compiler/checker-classes.d.ts +14 -3
- package/dist/api/compiler/checker-classes.js +136 -91
- package/dist/api/compiler/checker-contextual.d.ts +20 -0
- package/dist/api/compiler/checker-contextual.js +175 -62
- package/dist/api/compiler/checker-declaration-order.js +79 -79
- package/dist/api/compiler/checker-declarations.d.ts +1 -0
- package/dist/api/compiler/checker-declarations.js +160 -136
- package/dist/api/compiler/checker-declared-types.js +67 -65
- package/dist/api/compiler/checker-decorators.js +77 -77
- package/dist/api/compiler/checker-deprecation.d.ts +8 -3
- package/dist/api/compiler/checker-deprecation.js +76 -55
- package/dist/api/compiler/checker-destructuring.js +47 -45
- package/dist/api/compiler/checker-elaboration.js +24 -24
- package/dist/api/compiler/checker-emit-helpers.js +4 -4
- package/dist/api/compiler/checker-emit-resolver.d.ts +4 -2
- package/dist/api/compiler/checker-emit-resolver.js +25 -13
- package/dist/api/compiler/checker-evaluator.js +9 -9
- package/dist/api/compiler/checker-expressions.js +258 -212
- package/dist/api/compiler/checker-functions.js +113 -107
- package/dist/api/compiler/checker-generated-code.d.ts +0 -11
- package/dist/api/compiler/checker-generated-code.js +28 -52
- package/dist/api/compiler/checker-grammar.d.ts +1 -0
- package/dist/api/compiler/checker-grammar.js +469 -438
- package/dist/api/compiler/checker-heritage.js +91 -93
- package/dist/api/compiler/checker-inference.d.ts +77 -5
- package/dist/api/compiler/checker-inference.js +487 -113
- package/dist/api/compiler/checker-iteration.d.ts +0 -10
- package/dist/api/compiler/checker-iteration.js +35 -52
- package/dist/api/compiler/checker-javascript.js +14 -14
- package/dist/api/compiler/checker-jsdoc.d.ts +8 -10
- package/dist/api/compiler/checker-jsdoc.js +67 -58
- package/dist/api/compiler/checker-jsx.js +107 -89
- package/dist/api/compiler/checker-members.d.ts +9 -2
- package/dist/api/compiler/checker-members.js +210 -74
- package/dist/api/compiler/checker-modules.d.ts +15 -6
- package/dist/api/compiler/checker-modules.js +469 -309
- package/dist/api/compiler/checker-narrowing.js +273 -189
- package/dist/api/compiler/checker-object-literals.js +25 -22
- package/dist/api/compiler/checker-operators.js +126 -118
- package/dist/api/compiler/checker-overloads.js +27 -27
- package/dist/api/compiler/checker-property-access.js +59 -55
- package/dist/api/compiler/checker-services.d.ts +1 -0
- package/dist/api/compiler/checker-services.js +222 -210
- package/dist/api/compiler/checker-signatures.js +65 -49
- package/dist/api/compiler/checker-source-file.d.ts +5 -0
- package/dist/api/compiler/checker-source-file.js +154 -130
- package/dist/api/compiler/checker-statements.js +33 -32
- package/dist/api/compiler/checker-super.js +50 -50
- package/dist/api/compiler/checker-symbol-types.js +109 -93
- package/dist/api/compiler/checker-symbols.d.ts +13 -1
- package/dist/api/compiler/checker-symbols.js +264 -149
- package/dist/api/compiler/checker-type-factory.d.ts +5 -0
- package/dist/api/compiler/checker-type-factory.js +190 -46
- package/dist/api/compiler/checker-type-nodes.d.ts +1 -0
- package/dist/api/compiler/checker-type-nodes.js +179 -141
- package/dist/api/compiler/checker-type-operators.d.ts +2 -0
- package/dist/api/compiler/checker-type-operators.js +110 -63
- package/dist/api/compiler/checker-types.d.ts +80 -3
- package/dist/api/compiler/checker-types.js +121 -2
- package/dist/api/compiler/checker-unused.js +114 -118
- package/dist/api/compiler/checker-utilities.js +11 -11
- package/dist/api/compiler/checker.d.ts +97 -31
- package/dist/api/compiler/checker.js +149 -35
- package/dist/api/compiler/command-line.d.ts +1 -3
- package/dist/api/compiler/command-line.js +47 -44
- package/dist/api/compiler/compile-program.d.ts +24 -4
- package/dist/api/compiler/compile-program.js +53 -26
- package/dist/api/compiler/diagnostic-messages.d.ts +1849 -1774
- package/dist/api/compiler/diagnostic-messages.js +128 -122
- package/dist/api/compiler/diagnostics.js +7 -7
- package/dist/api/compiler/emitter.d.ts +7 -1
- package/dist/api/compiler/emitter.js +53 -11
- package/dist/api/compiler/expr-record.d.ts +11 -0
- package/dist/api/compiler/expr-record.js +53 -0
- package/dist/api/compiler/file-include.d.ts +2 -1
- package/dist/api/compiler/file-include.js +11 -7
- package/dist/api/compiler/file-loader.d.ts +10 -0
- package/dist/api/compiler/file-loader.js +138 -41
- package/dist/api/compiler/identifier-name.d.ts +9 -0
- package/dist/api/compiler/identifier-name.js +10 -0
- package/dist/api/compiler/instantiation.d.ts +7 -0
- package/dist/api/compiler/instantiation.js +101 -49
- package/dist/api/compiler/jsdoc.js +27 -25
- package/dist/api/compiler/link-tables.d.ts +48 -18
- package/dist/api/compiler/link-tables.js +80 -37
- package/dist/api/compiler/locales/cs-CZ.d.ts +1 -1
- package/dist/api/compiler/locales/cs-CZ.js +1 -1
- package/dist/api/compiler/locales/de-DE.d.ts +1 -1
- package/dist/api/compiler/locales/de-DE.js +1 -1
- package/dist/api/compiler/locales/es-ES.d.ts +1 -1
- package/dist/api/compiler/locales/es-ES.js +1 -1
- package/dist/api/compiler/locales/fr-FR.d.ts +1 -1
- package/dist/api/compiler/locales/fr-FR.js +1 -1
- package/dist/api/compiler/locales/it-IT.d.ts +1 -1
- package/dist/api/compiler/locales/it-IT.js +1 -1
- package/dist/api/compiler/locales/ja-JP.d.ts +1 -1
- package/dist/api/compiler/locales/ja-JP.js +1 -1
- package/dist/api/compiler/locales/ko-KR.d.ts +1 -1
- package/dist/api/compiler/locales/ko-KR.js +1 -1
- package/dist/api/compiler/locales/pl-PL.d.ts +1 -1
- package/dist/api/compiler/locales/pl-PL.js +1 -1
- package/dist/api/compiler/locales/pt-BR.d.ts +1 -1
- package/dist/api/compiler/locales/pt-BR.js +1 -1
- package/dist/api/compiler/locales/ru-RU.d.ts +1 -1
- package/dist/api/compiler/locales/ru-RU.js +1 -1
- package/dist/api/compiler/locales/tr-TR.d.ts +1 -1
- package/dist/api/compiler/locales/tr-TR.js +1 -1
- package/dist/api/compiler/locales/zh-CN.d.ts +1 -1
- package/dist/api/compiler/locales/zh-CN.js +1 -1
- package/dist/api/compiler/locales/zh-TW.d.ts +1 -1
- package/dist/api/compiler/locales/zh-TW.js +1 -1
- package/dist/api/compiler/module-resolution-types.js +6 -6
- package/dist/api/compiler/module-resolution.d.ts +10 -1
- package/dist/api/compiler/module-resolution.js +115 -84
- package/dist/api/compiler/module-specifiers.d.ts +15 -0
- package/dist/api/compiler/module-specifiers.js +24 -18
- package/dist/api/compiler/name-resolver.js +74 -65
- package/dist/api/compiler/node-builder-names.d.ts +11 -3
- package/dist/api/compiler/node-builder-names.js +210 -90
- package/dist/api/compiler/node-builder-pseudo.js +29 -31
- package/dist/api/compiler/node-builder-reuse.js +23 -22
- package/dist/api/compiler/node-builder.d.ts +18 -1
- package/dist/api/compiler/node-builder.js +191 -102
- package/dist/api/compiler/option-declarations.d.ts +2 -6
- package/dist/api/compiler/option-declarations.js +315 -375
- package/dist/api/compiler/options.d.ts +15 -33
- package/dist/api/compiler/options.js +21 -54
- package/dist/api/compiler/output-paths.d.ts +4 -1
- package/dist/api/compiler/output-paths.js +6 -11
- package/dist/api/compiler/package-json.d.ts +3 -3
- package/dist/api/compiler/package-json.js +11 -10
- package/dist/api/compiler/parser.d.ts +42 -20
- package/dist/api/compiler/parser.js +318 -224
- package/dist/api/compiler/path.d.ts +9 -0
- package/dist/api/compiler/path.js +20 -3
- package/dist/api/compiler/printer/emit-context.d.ts +3 -1
- package/dist/api/compiler/printer/emit-context.js +16 -1
- package/dist/api/compiler/printer/factory-base.d.ts +2 -2
- package/dist/api/compiler/printer/factory-base.js +7 -3
- package/dist/api/compiler/printer/factory.js +6 -3
- package/dist/api/compiler/printer/helpers.js +10 -1
- package/dist/api/compiler/printer/name-generator.d.ts +1 -1
- package/dist/api/compiler/printer/name-generator.js +35 -16
- package/dist/api/compiler/printer/printer.d.ts +1 -0
- package/dist/api/compiler/printer/printer.js +306 -283
- package/dist/api/compiler/printer/utilities.js +149 -147
- package/dist/api/compiler/program-checker.d.ts +8 -2
- package/dist/api/compiler/program-checker.js +84 -34
- package/dist/api/compiler/program-utilities.d.ts +3 -1
- package/dist/api/compiler/program-utilities.js +28 -15
- package/dist/api/compiler/program.d.ts +2 -0
- package/dist/api/compiler/program.js +69 -57
- package/dist/api/compiler/pseudo-bigint.d.ts +2 -0
- package/dist/api/compiler/pseudo-bigint.js +18 -0
- package/dist/api/compiler/regexp-checker.d.ts +1 -1
- package/dist/api/compiler/regexp-checker.js +93 -76
- package/dist/api/compiler/relations.d.ts +27 -4
- package/dist/api/compiler/relations.js +337 -180
- package/dist/api/compiler/reparser.js +64 -59
- package/dist/api/compiler/scanner.d.ts +27 -2
- package/dist/api/compiler/scanner.js +181 -150
- package/dist/api/compiler/shared-results.d.ts +696 -0
- package/dist/api/compiler/shared-results.js +2905 -0
- package/dist/api/compiler/sourcemap.js +2 -2
- package/dist/api/compiler/symbol-accessibility.js +87 -74
- package/dist/api/compiler/symbol.d.ts +22 -13
- package/dist/api/compiler/symbol.js +15 -1
- package/dist/api/compiler/syntax-kind.d.ts +198 -197
- package/dist/api/compiler/transformers/alias-references.js +247 -139
- package/dist/api/compiler/transformers/async-utilities.js +25 -25
- package/dist/api/compiler/transformers/async.d.ts +0 -1
- package/dist/api/compiler/transformers/async.js +64 -77
- package/dist/api/compiler/transformers/class-fields.d.ts +1 -0
- package/dist/api/compiler/transformers/class-fields.js +81 -78
- package/dist/api/compiler/transformers/commonjs-module.js +18 -15
- package/dist/api/compiler/transformers/const-enum-inliner.js +1 -1
- package/dist/api/compiler/transformers/declarations-diagnostics.js +247 -244
- package/dist/api/compiler/transformers/declarations-pseudo.js +100 -100
- package/dist/api/compiler/transformers/declarations-resolver.d.ts +0 -3
- package/dist/api/compiler/transformers/declarations-syntactic.d.ts +1 -2
- package/dist/api/compiler/transformers/declarations-syntactic.js +134 -156
- package/dist/api/compiler/transformers/declarations-tracker.js +18 -18
- package/dist/api/compiler/transformers/declarations.d.ts +4 -1
- package/dist/api/compiler/transformers/declarations.js +307 -239
- package/dist/api/compiler/transformers/decorator-metadata.d.ts +1 -1
- package/dist/api/compiler/transformers/decorator-metadata.js +53 -45
- package/dist/api/compiler/transformers/decorator-utilities.js +24 -24
- package/dist/api/compiler/transformers/destructuring.js +19 -18
- package/dist/api/compiler/transformers/emit-resolver.js +1 -1
- package/dist/api/compiler/transformers/es-decorators.js +55 -55
- package/dist/api/compiler/transformers/external-module-info.js +3 -3
- package/dist/api/compiler/transformers/for-await.js +25 -25
- package/dist/api/compiler/transformers/import-elision.js +14 -14
- package/dist/api/compiler/transformers/jsx.js +12 -12
- package/dist/api/compiler/transformers/legacy-decorators.js +17 -17
- package/dist/api/compiler/transformers/module.js +8 -8
- package/dist/api/compiler/transformers/named-evaluation.js +4 -4
- package/dist/api/compiler/transformers/object-rest-spread.js +20 -20
- package/dist/api/compiler/transformers/optional-chain.js +10 -10
- package/dist/api/compiler/transformers/reference-resolver.d.ts +12 -1
- package/dist/api/compiler/transformers/reference-resolver.js +131 -69
- package/dist/api/compiler/transformers/runtime-syntax.js +35 -31
- package/dist/api/compiler/transformers/subtree-facts.js +47 -47
- package/dist/api/compiler/transformers/syntax-facts.js +56 -58
- package/dist/api/compiler/transformers/type-eraser.js +73 -66
- package/dist/api/compiler/transformers/type-serialization.js +24 -24
- package/dist/api/compiler/transformers/using.js +12 -12
- package/dist/api/compiler/transformers/utilities.js +77 -77
- package/dist/api/compiler/transformers/visitor-base.js +172 -172
- package/dist/api/compiler/transformers/visitor-hooks.js +6 -2
- package/dist/api/compiler/tsconfig.d.ts +10 -2
- package/dist/api/compiler/tsconfig.js +136 -48
- package/dist/api/compiler/type-printer.js +40 -3
- package/dist/api/compiler/types.d.ts +2 -1
- package/dist/api/library/ast.generated.d.ts +42 -39
- package/dist/api/library/ast.generated.js +1 -1
- package/dist/api/library/compiler-options.generated.d.ts +111 -100
- package/dist/api/library/compiler-options.generated.js +1 -1
- package/dist/api/library/disk.js +12 -1
- package/dist/api/library/enums.generated.d.ts +206 -206
- package/dist/api/library/enums.generated.js +206 -206
- package/dist/api/library/nodes.js +26 -26
- package/package.json +9 -9
- package/src/compiler/ast-utilities.ts +99 -7
- package/src/compiler/ast.ts +74 -38
- package/src/compiler/binder.ts +39 -4
- package/src/compiler/cgroup.ts +157 -0
- package/src/compiler/character-codes.ts +2 -2
- package/src/compiler/checker-calls.ts +76 -8
- package/src/compiler/checker-classes.ts +80 -25
- package/src/compiler/checker-contextual.ts +110 -1
- package/src/compiler/checker-declarations.ts +31 -4
- package/src/compiler/checker-declared-types.ts +8 -5
- package/src/compiler/checker-decorators.ts +1 -1
- package/src/compiler/checker-deprecation.ts +29 -8
- package/src/compiler/checker-destructuring.ts +10 -3
- package/src/compiler/checker-emit-helpers.ts +1 -0
- package/src/compiler/checker-emit-resolver.ts +16 -6
- package/src/compiler/checker-expressions.ts +95 -47
- package/src/compiler/checker-functions.ts +21 -6
- package/src/compiler/checker-generated-code.ts +2 -22
- package/src/compiler/checker-grammar.ts +133 -60
- package/src/compiler/checker-heritage.ts +22 -21
- package/src/compiler/checker-inference.ts +514 -87
- package/src/compiler/checker-iteration.ts +18 -31
- package/src/compiler/checker-javascript.ts +1 -1
- package/src/compiler/checker-jsdoc.ts +50 -27
- package/src/compiler/checker-jsx.ts +28 -5
- package/src/compiler/checker-members.ts +197 -55
- package/src/compiler/checker-modules.ts +332 -65
- package/src/compiler/checker-narrowing.ts +98 -19
- package/src/compiler/checker-object-literals.ts +3 -0
- package/src/compiler/checker-operators.ts +11 -4
- package/src/compiler/checker-property-access.ts +7 -2
- package/src/compiler/checker-services.ts +39 -12
- package/src/compiler/checker-signatures.ts +15 -1
- package/src/compiler/checker-source-file.ts +39 -13
- package/src/compiler/checker-statements.ts +3 -2
- package/src/compiler/checker-symbol-types.ts +29 -6
- package/src/compiler/checker-symbols.ts +158 -15
- package/src/compiler/checker-type-factory.ts +173 -35
- package/src/compiler/checker-type-nodes.ts +46 -3
- package/src/compiler/checker-type-operators.ts +83 -26
- package/src/compiler/checker-types.ts +147 -4
- package/src/compiler/checker-unused.ts +9 -14
- package/src/compiler/checker.ts +175 -41
- package/src/compiler/command-line.ts +28 -28
- package/src/compiler/compile-program.ts +59 -25
- package/src/compiler/decoder.ts +15 -5
- package/src/compiler/diagnostic-messages.ts +1973 -1892
- package/src/compiler/doctor-report.ts +133 -0
- package/src/compiler/emitter.ts +57 -8
- package/src/compiler/encoder.ts +23 -8
- package/src/compiler/expr-record.ts +59 -0
- package/src/compiler/file-include.ts +9 -3
- package/src/compiler/file-loader.ts +139 -32
- package/src/compiler/help.ts +10 -14
- package/src/compiler/identifier-name.ts +13 -0
- package/src/compiler/incremental.ts +86 -18
- package/src/compiler/init.ts +2 -7
- package/src/compiler/instantiation.ts +77 -22
- package/src/compiler/jsdoc.ts +7 -3
- package/src/compiler/link-tables.ts +82 -37
- package/src/compiler/locales/cs-CZ.ts +1 -1
- package/src/compiler/locales/de-DE.ts +1 -1
- package/src/compiler/locales/es-ES.ts +1 -1
- package/src/compiler/locales/fr-FR.ts +1 -1
- package/src/compiler/locales/it-IT.ts +1 -1
- package/src/compiler/locales/ja-JP.ts +1 -1
- package/src/compiler/locales/ko-KR.ts +1 -1
- package/src/compiler/locales/pl-PL.ts +1 -1
- package/src/compiler/locales/pt-BR.ts +1 -1
- package/src/compiler/locales/ru-RU.ts +1 -1
- package/src/compiler/locales/tr-TR.ts +1 -1
- package/src/compiler/locales/zh-CN.ts +1 -1
- package/src/compiler/locales/zh-TW.ts +1 -1
- package/src/compiler/module-resolution.ts +44 -8
- package/src/compiler/module-specifiers.ts +62 -20
- package/src/compiler/name-resolver.ts +9 -1
- package/src/compiler/node-builder-names.ts +236 -54
- package/src/compiler/node-builder-pseudo.ts +4 -7
- package/src/compiler/node-builder-reuse.ts +5 -4
- package/src/compiler/node-builder.ts +130 -31
- package/src/compiler/option-declarations.ts +33 -103
- package/src/compiler/options.ts +23 -62
- package/src/compiler/output-paths.ts +5 -18
- package/src/compiler/package-entrypoints.ts +345 -0
- package/src/compiler/package-json.ts +4 -4
- package/src/compiler/parallel-check.ts +543 -147
- package/src/compiler/parallel-emit.ts +4 -4
- package/src/compiler/parser.ts +166 -47
- package/src/compiler/path.ts +22 -2
- package/src/compiler/printer/emit-context.ts +16 -0
- package/src/compiler/printer/factory-base.ts +10 -3
- package/src/compiler/printer/factory.ts +7 -3
- package/src/compiler/printer/helpers.ts +10 -1
- package/src/compiler/printer/name-generator.ts +24 -2
- package/src/compiler/printer/printer.ts +39 -16
- package/src/compiler/printer/utilities.ts +8 -2
- package/src/compiler/program-checker.ts +53 -5
- package/src/compiler/program-utilities.ts +23 -10
- package/src/compiler/program.ts +13 -1
- package/src/compiler/pseudo-bigint.ts +17 -0
- package/src/compiler/regexp-checker.ts +63 -30
- package/src/compiler/relations.ts +233 -77
- package/src/compiler/reparser.ts +14 -5
- package/src/compiler/run-config.ts +1383 -0
- package/src/compiler/run-record-read.ts +87 -0
- package/src/compiler/run-records.ts +575 -0
- package/src/compiler/scanner.ts +166 -120
- package/src/compiler/shared-results.ts +3144 -0
- package/src/compiler/show-config.ts +18 -1
- package/src/compiler/sourcemap.ts +2 -2
- package/src/compiler/symbol-accessibility.ts +26 -3
- package/src/compiler/symbol.ts +31 -14
- package/src/compiler/syntax-kind.ts +188 -187
- package/src/compiler/thread-entry.ts +22 -3
- package/src/compiler/transformers/alias-references.ts +123 -4
- package/src/compiler/transformers/async.ts +2 -17
- package/src/compiler/transformers/class-fields.ts +13 -12
- package/src/compiler/transformers/commonjs-module.ts +11 -7
- package/src/compiler/transformers/declarations-diagnostics.ts +5 -3
- package/src/compiler/transformers/declarations-pseudo.ts +2 -4
- package/src/compiler/transformers/declarations-resolver.ts +0 -3
- package/src/compiler/transformers/declarations-syntactic.ts +1 -21
- package/src/compiler/transformers/declarations.ts +136 -49
- package/src/compiler/transformers/decorator-metadata.ts +9 -1
- package/src/compiler/transformers/destructuring.ts +4 -3
- package/src/compiler/transformers/external-module-info.ts +1 -1
- package/src/compiler/transformers/jsx.ts +2 -1
- package/src/compiler/transformers/reference-resolver.ts +83 -19
- package/src/compiler/transformers/runtime-syntax.ts +6 -1
- package/src/compiler/transformers/syntax-facts.ts +2 -7
- package/src/compiler/transformers/type-eraser.ts +10 -1
- package/src/compiler/transformers/type-serialization.ts +3 -2
- package/src/compiler/transformers/visitor-base.ts +2 -1
- package/src/compiler/transformers/visitor-hooks.ts +9 -4
- package/src/compiler/tsc-build.ts +67 -6
- package/src/compiler/tsc-cli.ts +35 -4
- package/src/compiler/tsc-compile.ts +220 -10
- package/src/compiler/tsc-watch.ts +97 -47
- package/src/compiler/tsconfig.ts +176 -19
- package/src/compiler/type-printer.ts +36 -2
- package/src/compiler/types.ts +2 -1
- package/src/library/ast.generated.ts +57 -41
- package/src/library/compiler-options.generated.ts +117 -103
- package/src/library/disk.ts +10 -1
- package/src/library/enums.generated.ts +196 -196
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
// Contextual typing: the type an expression's position implies, and contextual signatures.
|
|
2
2
|
import { resolvedReturnTypeOf } from './side-state.js';
|
|
3
|
-
import { getInitializer, getName, getParameters, getType, getText, getSymbol, getTypeParameters, JsxAttribute, JsxElement, } from './ast.js';
|
|
3
|
+
import { getArguments, getInitializer, getName, getParameters, getType, getText, getSymbol, getTypeParameters, JsxAttribute, JsxElement, } from './ast.js';
|
|
4
4
|
import { getImmediatelyInvokedFunctionExpression, isFunctionExpressionOrArrowFunction, isObjectLiteralMethod, isStatic, } from './binder-utilities.js';
|
|
5
5
|
import { filterType, getIntersectionType, getNumberLiteralType, getRegularTypeOfLiteralType, getUnionType, getUnionTypeEx, getWidenedLiteralType, getEndElementCount, getStringLiteralType, getTypeArguments, getTypeReferenceArity, mapType, mapTypeEx, isTupleType, tupleTargetOf, typesOf, } from './checker-type-factory.js';
|
|
6
6
|
import { combineUnionOrIntersectionMemberSignatures, compareTypeParametersIdentical, findApplicableIndexInfo, getApparentType, getBaseConstraintOrType, getIndexInfosOfStructuredType, getPropertiesOfType, getPropertyOfType, getReducedType, getSignaturesOfType, } from './checker-members.js';
|
|
@@ -68,6 +68,116 @@ export function findContextualNode(c, node, includeCaches) {
|
|
|
68
68
|
return i;
|
|
69
69
|
return -1;
|
|
70
70
|
}
|
|
71
|
+
/**
|
|
72
|
+
* The id of the contextual type in force for `node`, or -1 if the node's contextual type is not on
|
|
73
|
+
* the stack. A key built from -1 can't tell a check under a contextual type that was not pushed from
|
|
74
|
+
* a check with no contextual type, so callers record nothing under -1.
|
|
75
|
+
*/
|
|
76
|
+
export function getContextualTypeId(c, node) {
|
|
77
|
+
const index = findContextualNode(c, node, true);
|
|
78
|
+
if (index < 0)
|
|
79
|
+
return -1;
|
|
80
|
+
const t = c.inferenceCaches.contextualTypes[index];
|
|
81
|
+
return t === undefined ? -1 : t.id;
|
|
82
|
+
}
|
|
83
|
+
/**
|
|
84
|
+
* Whether a check of `node` has no contextual type and no inference context, so its type is a
|
|
85
|
+
* function of the node and the check mode alone: the node is not on the contextual stack, no
|
|
86
|
+
* inference context contains it, and its parent gives it no contextual type. The parents answered
|
|
87
|
+
* here are the ones `getContextualTypeEx` returns `undefined` for without computing anything; a
|
|
88
|
+
* parent it computes a type for is not answered, so the result is never "yes" for a check that
|
|
89
|
+
* could have a contextual type.
|
|
90
|
+
*
|
|
91
|
+
* Types computed inside a flow loop are provisional (the checker does not cache them either), so a
|
|
92
|
+
* check in a loop is not context-free. The same holds while a reduce label is in force, as when
|
|
93
|
+
* flow analysis revisits a `finally` block with the antecedents of one outgoing path: the flow
|
|
94
|
+
* state differs from the one the earlier check of the block saw.
|
|
95
|
+
*/
|
|
96
|
+
export function isCheckedWithoutContextualType(c, node) {
|
|
97
|
+
if (c.flowLoopStack.length !== 0)
|
|
98
|
+
return false;
|
|
99
|
+
if (c.flowReduceLabels.length !== 0)
|
|
100
|
+
return false;
|
|
101
|
+
if (findContextualNode(c, node, true) >= 0)
|
|
102
|
+
return false;
|
|
103
|
+
if (getInferenceContext(c, node) !== undefined)
|
|
104
|
+
return false;
|
|
105
|
+
const parent = node.parent;
|
|
106
|
+
if (parent === undefined)
|
|
107
|
+
return true;
|
|
108
|
+
switch (parent.kind) {
|
|
109
|
+
case 262 /* SyntaxKind.VariableDeclaration */:
|
|
110
|
+
case 171 /* SyntaxKind.Parameter */:
|
|
111
|
+
case 174 /* SyntaxKind.PropertyDeclaration */:
|
|
112
|
+
case 173 /* SyntaxKind.PropertySignature */:
|
|
113
|
+
case 210 /* SyntaxKind.BindingElement */:
|
|
114
|
+
// Only the initializer is contextually typed by the declaration.
|
|
115
|
+
return getInitializer(parent) !== node;
|
|
116
|
+
case 215 /* SyntaxKind.CallExpression */:
|
|
117
|
+
case 216 /* SyntaxKind.NewExpression */: {
|
|
118
|
+
// Only the arguments are contextually typed by the parameters; the callee is not.
|
|
119
|
+
const args = getArguments(parent);
|
|
120
|
+
if (args !== undefined) {
|
|
121
|
+
for (const arg of args.nodes)
|
|
122
|
+
if (arg === node)
|
|
123
|
+
return false;
|
|
124
|
+
}
|
|
125
|
+
return true;
|
|
126
|
+
}
|
|
127
|
+
case 212 /* SyntaxKind.ObjectLiteralExpression */:
|
|
128
|
+
// Only a method takes the property's contextual type.
|
|
129
|
+
return node.kind !== 176 /* SyntaxKind.MethodDeclaration */;
|
|
130
|
+
case 228 /* SyntaxKind.BinaryExpression */: {
|
|
131
|
+
const binary = parent;
|
|
132
|
+
if (binary.type !== undefined)
|
|
133
|
+
return false;
|
|
134
|
+
switch (binary.operatorToken.kind) {
|
|
135
|
+
case 63 /* SyntaxKind.EqualsToken */:
|
|
136
|
+
case 76 /* SyntaxKind.AmpersandAmpersandEqualsToken */:
|
|
137
|
+
case 75 /* SyntaxKind.BarBarEqualsToken */:
|
|
138
|
+
case 77 /* SyntaxKind.QuestionQuestionEqualsToken */:
|
|
139
|
+
return node !== binary.right;
|
|
140
|
+
case 56 /* SyntaxKind.BarBarToken */:
|
|
141
|
+
case 60 /* SyntaxKind.QuestionQuestionToken */:
|
|
142
|
+
case 55 /* SyntaxKind.AmpersandAmpersandToken */:
|
|
143
|
+
case 27 /* SyntaxKind.CommaToken */:
|
|
144
|
+
return false;
|
|
145
|
+
}
|
|
146
|
+
return true;
|
|
147
|
+
}
|
|
148
|
+
case 229 /* SyntaxKind.ConditionalExpression */: {
|
|
149
|
+
const conditional = parent;
|
|
150
|
+
return node !== conditional.whenTrue && node !== conditional.whenFalse;
|
|
151
|
+
}
|
|
152
|
+
case 241 /* SyntaxKind.TemplateSpan */: {
|
|
153
|
+
// Only a tagged template types its spans.
|
|
154
|
+
const template = parent.parent;
|
|
155
|
+
return template.parent === undefined || template.parent.kind !== 217 /* SyntaxKind.TaggedTemplateExpression */;
|
|
156
|
+
}
|
|
157
|
+
case 221 /* SyntaxKind.ArrowFunction */:
|
|
158
|
+
case 255 /* SyntaxKind.ReturnStatement */:
|
|
159
|
+
case 231 /* SyntaxKind.YieldExpression */:
|
|
160
|
+
case 225 /* SyntaxKind.AwaitExpression */:
|
|
161
|
+
case 172 /* SyntaxKind.Decorator */:
|
|
162
|
+
case 236 /* SyntaxKind.AsExpression */:
|
|
163
|
+
case 218 /* SyntaxKind.TypeAssertionExpression */:
|
|
164
|
+
case 240 /* SyntaxKind.SatisfiesExpression */:
|
|
165
|
+
case 279 /* SyntaxKind.ExportAssignment */:
|
|
166
|
+
case 304 /* SyntaxKind.PropertyAssignment */:
|
|
167
|
+
case 305 /* SyntaxKind.ShorthandPropertyAssignment */:
|
|
168
|
+
case 306 /* SyntaxKind.SpreadAssignment */:
|
|
169
|
+
case 211 /* SyntaxKind.ArrayLiteralExpression */:
|
|
170
|
+
case 219 /* SyntaxKind.ParenthesizedExpression */:
|
|
171
|
+
case 237 /* SyntaxKind.NonNullExpression */:
|
|
172
|
+
case 296 /* SyntaxKind.JsxExpression */:
|
|
173
|
+
case 293 /* SyntaxKind.JsxAttribute */:
|
|
174
|
+
case 295 /* SyntaxKind.JsxSpreadAttribute */:
|
|
175
|
+
case 288 /* SyntaxKind.JsxOpeningElement */:
|
|
176
|
+
case 287 /* SyntaxKind.JsxSelfClosingElement */:
|
|
177
|
+
return false;
|
|
178
|
+
}
|
|
179
|
+
return true;
|
|
180
|
+
}
|
|
71
181
|
export function pushInferenceContext(c, node, context) {
|
|
72
182
|
const caches = c.inferenceCaches;
|
|
73
183
|
const depth = caches.inferenceDepth;
|
|
@@ -98,7 +208,7 @@ export function getInferenceContext(c, node) {
|
|
|
98
208
|
}
|
|
99
209
|
/** The node a contextual type for `node` is pushed onto: an element for its attributes, which spans its children. */
|
|
100
210
|
function getContextNode(node) {
|
|
101
|
-
if (node.kind ===
|
|
211
|
+
if (node.kind === 294 /* SyntaxKind.JsxAttributes */ && node.parent.kind !== 287 /* SyntaxKind.JsxSelfClosingElement */)
|
|
102
212
|
return node.parent.parent;
|
|
103
213
|
return node;
|
|
104
214
|
}
|
|
@@ -175,56 +285,56 @@ export function getContextualTypeEx(c, node, contextFlags) {
|
|
|
175
285
|
if (parent === undefined)
|
|
176
286
|
return undefined;
|
|
177
287
|
switch (parent.kind) {
|
|
178
|
-
case
|
|
179
|
-
case
|
|
180
|
-
case
|
|
181
|
-
case
|
|
182
|
-
case
|
|
288
|
+
case 262 /* SyntaxKind.VariableDeclaration */:
|
|
289
|
+
case 171 /* SyntaxKind.Parameter */:
|
|
290
|
+
case 174 /* SyntaxKind.PropertyDeclaration */:
|
|
291
|
+
case 173 /* SyntaxKind.PropertySignature */:
|
|
292
|
+
case 210 /* SyntaxKind.BindingElement */:
|
|
183
293
|
if (getInitializer(parent) !== node)
|
|
184
294
|
return undefined;
|
|
185
295
|
return getContextualTypeForInitializerExpression(c, parent, contextFlags);
|
|
186
|
-
case
|
|
187
|
-
case
|
|
296
|
+
case 221 /* SyntaxKind.ArrowFunction */:
|
|
297
|
+
case 255 /* SyntaxKind.ReturnStatement */:
|
|
188
298
|
return getContextualTypeForReturnExpression(c, node);
|
|
189
|
-
case
|
|
299
|
+
case 231 /* SyntaxKind.YieldExpression */:
|
|
190
300
|
return getContextualTypeForYieldOperand(c, parent, contextFlags);
|
|
191
|
-
case
|
|
301
|
+
case 225 /* SyntaxKind.AwaitExpression */:
|
|
192
302
|
return getContextualTypeForAwaitOperand(c, parent, contextFlags);
|
|
193
|
-
case
|
|
194
|
-
case
|
|
303
|
+
case 215 /* SyntaxKind.CallExpression */:
|
|
304
|
+
case 216 /* SyntaxKind.NewExpression */:
|
|
195
305
|
return getContextualTypeForArgument(c, parent, node);
|
|
196
|
-
case
|
|
306
|
+
case 172 /* SyntaxKind.Decorator */: {
|
|
197
307
|
// A decorator expression is contextually typed by the call the runtime makes.
|
|
198
308
|
const signature = getDecoratorCallSignature(c, parent);
|
|
199
309
|
return signature !== undefined ? getOrCreateTypeFromSignature(c, signature) : undefined;
|
|
200
310
|
}
|
|
201
|
-
case
|
|
202
|
-
case
|
|
311
|
+
case 236 /* SyntaxKind.AsExpression */:
|
|
312
|
+
case 218 /* SyntaxKind.TypeAssertionExpression */: {
|
|
203
313
|
const typeNode = getType(parent);
|
|
204
314
|
return isConstTypeReference(typeNode)
|
|
205
315
|
? getContextualTypeEx(c, parent, contextFlags)
|
|
206
316
|
: getTypeFromTypeNode(c, typeNode);
|
|
207
317
|
}
|
|
208
|
-
case
|
|
318
|
+
case 240 /* SyntaxKind.SatisfiesExpression */:
|
|
209
319
|
return getTypeFromTypeNode(c, getType(parent));
|
|
210
|
-
case
|
|
320
|
+
case 279 /* SyntaxKind.ExportAssignment */: {
|
|
211
321
|
// A JSDoc `@type` on `export default`.
|
|
212
322
|
const typeNode = getType(parent);
|
|
213
323
|
return typeNode !== undefined ? getTypeFromTypeNode(c, typeNode) : undefined;
|
|
214
324
|
}
|
|
215
|
-
case
|
|
325
|
+
case 228 /* SyntaxKind.BinaryExpression */:
|
|
216
326
|
return getContextualTypeForBinaryOperand(c, parent, node, contextFlags);
|
|
217
|
-
case
|
|
218
|
-
case
|
|
327
|
+
case 304 /* SyntaxKind.PropertyAssignment */:
|
|
328
|
+
case 305 /* SyntaxKind.ShorthandPropertyAssignment */:
|
|
219
329
|
// The property's name gets the property's contextual type too.
|
|
220
330
|
return getContextualTypeForObjectLiteralElement(c, parent, contextFlags);
|
|
221
|
-
case
|
|
222
|
-
return node.kind ===
|
|
331
|
+
case 212 /* SyntaxKind.ObjectLiteralExpression */:
|
|
332
|
+
return node.kind === 176 /* SyntaxKind.MethodDeclaration */
|
|
223
333
|
? getContextualTypeForObjectLiteralElement(c, node, contextFlags)
|
|
224
334
|
: undefined;
|
|
225
|
-
case
|
|
335
|
+
case 306 /* SyntaxKind.SpreadAssignment */:
|
|
226
336
|
return getContextualTypeEx(c, parent.parent, contextFlags);
|
|
227
|
-
case
|
|
337
|
+
case 211 /* SyntaxKind.ArrayLiteralExpression */: {
|
|
228
338
|
const elements = parent.elements.nodes;
|
|
229
339
|
const index = indexOfNode(elements, node);
|
|
230
340
|
if (index < 0)
|
|
@@ -232,28 +342,28 @@ export function getContextualTypeEx(c, node, contextFlags) {
|
|
|
232
342
|
const spreads = getSpreadIndices(c, parent, elements);
|
|
233
343
|
return getContextualTypeForElementExpression(c, getApparentTypeOfContextualTypeEx(c, parent, contextFlags), index, elements.length, spreads.first, spreads.last);
|
|
234
344
|
}
|
|
235
|
-
case
|
|
345
|
+
case 229 /* SyntaxKind.ConditionalExpression */: {
|
|
236
346
|
const cond = parent;
|
|
237
347
|
return node === cond.whenTrue || node === cond.whenFalse
|
|
238
348
|
? getContextualTypeEx(c, parent, contextFlags)
|
|
239
349
|
: undefined;
|
|
240
350
|
}
|
|
241
|
-
case
|
|
351
|
+
case 241 /* SyntaxKind.TemplateSpan */: {
|
|
242
352
|
const template = parent.parent;
|
|
243
|
-
return template.parent !== undefined && template.parent.kind ===
|
|
353
|
+
return template.parent !== undefined && template.parent.kind === 217 /* SyntaxKind.TaggedTemplateExpression */
|
|
244
354
|
? getContextualTypeForArgument(c, template.parent, node)
|
|
245
355
|
: undefined;
|
|
246
356
|
}
|
|
247
|
-
case
|
|
248
|
-
case
|
|
357
|
+
case 219 /* SyntaxKind.ParenthesizedExpression */:
|
|
358
|
+
case 237 /* SyntaxKind.NonNullExpression */:
|
|
249
359
|
return getContextualTypeEx(c, parent, contextFlags);
|
|
250
|
-
case
|
|
360
|
+
case 296 /* SyntaxKind.JsxExpression */:
|
|
251
361
|
return getContextualTypeForJsxExpression(c, parent, contextFlags);
|
|
252
|
-
case
|
|
253
|
-
case
|
|
362
|
+
case 293 /* SyntaxKind.JsxAttribute */:
|
|
363
|
+
case 295 /* SyntaxKind.JsxSpreadAttribute */:
|
|
254
364
|
return getContextualTypeForJsxAttribute(c, parent, contextFlags);
|
|
255
|
-
case
|
|
256
|
-
case
|
|
365
|
+
case 288 /* SyntaxKind.JsxOpeningElement */:
|
|
366
|
+
case 287 /* SyntaxKind.JsxSelfClosingElement */:
|
|
257
367
|
return getContextualJsxElementAttributesType(c, parent, contextFlags);
|
|
258
368
|
}
|
|
259
369
|
return undefined;
|
|
@@ -266,7 +376,7 @@ function getContextualTypeForInitializerExpression(c, declaration, contextFlags)
|
|
|
266
376
|
const name = getName(declaration);
|
|
267
377
|
if ((contextFlags & 8 /* ContextFlags.SkipBindingPatterns */) === 0 &&
|
|
268
378
|
name !== undefined &&
|
|
269
|
-
(name.kind ===
|
|
379
|
+
(name.kind === 208 /* SyntaxKind.ObjectBindingPattern */ || name.kind === 209 /* SyntaxKind.ArrayBindingPattern */) &&
|
|
270
380
|
getElements(name).nodes.length > 0)
|
|
271
381
|
return getTypeFromBindingPattern(c, name, true, false);
|
|
272
382
|
return undefined;
|
|
@@ -275,17 +385,20 @@ function getContextualTypeForInitializer(c, declaration, contextFlags) {
|
|
|
275
385
|
const typeNode = getType(declaration);
|
|
276
386
|
if (typeNode !== undefined)
|
|
277
387
|
return getTypeFromTypeNode(c, typeNode);
|
|
278
|
-
if (declaration.kind ===
|
|
388
|
+
if (declaration.kind === 171 /* SyntaxKind.Parameter */)
|
|
279
389
|
return getContextuallyTypedParameterTypeOrUndefined(c, declaration);
|
|
280
|
-
if (declaration.kind ===
|
|
390
|
+
if (declaration.kind === 210 /* SyntaxKind.BindingElement */)
|
|
281
391
|
return getContextualTypeForBindingElement(c, declaration);
|
|
282
392
|
// A static property of a class expression takes the type of the same property of the class's contextual type.
|
|
283
|
-
if (declaration.kind ===
|
|
393
|
+
if (declaration.kind === 174 /* SyntaxKind.PropertyDeclaration */ &&
|
|
284
394
|
isStatic(declaration) &&
|
|
285
|
-
declaration.parent.kind ===
|
|
395
|
+
declaration.parent.kind === 233 /* SyntaxKind.ClassExpression */) {
|
|
286
396
|
const parentType = getContextualTypeEx(c, declaration.parent, contextFlags);
|
|
287
397
|
const symbol = getSymbolOfDeclaration(c, declaration);
|
|
288
|
-
|
|
398
|
+
// The class's own type might still be in progress, so contextually typing by it would report a spurious circularity.
|
|
399
|
+
if (parentType !== undefined &&
|
|
400
|
+
symbol !== undefined &&
|
|
401
|
+
parentType.symbol !== getSymbolOfDeclaration(c, declaration.parent))
|
|
289
402
|
return getTypeOfPropertyOfContextualType(c, parentType, symbol.name);
|
|
290
403
|
}
|
|
291
404
|
return undefined;
|
|
@@ -295,18 +408,18 @@ function getContextualTypeForBindingElement(c, declaration) {
|
|
|
295
408
|
const element = declaration;
|
|
296
409
|
const name = element.propertyName ?? element.name;
|
|
297
410
|
if (name === undefined ||
|
|
298
|
-
name.kind ===
|
|
299
|
-
name.kind ===
|
|
300
|
-
(name.kind ===
|
|
411
|
+
name.kind === 208 /* SyntaxKind.ObjectBindingPattern */ ||
|
|
412
|
+
name.kind === 209 /* SyntaxKind.ArrayBindingPattern */ ||
|
|
413
|
+
(name.kind === 169 /* SyntaxKind.ComputedPropertyName */ && !isLiteralComputedName(name)))
|
|
301
414
|
return undefined;
|
|
302
415
|
const parent = declaration.parent.parent;
|
|
303
416
|
let parentType = getContextualTypeForInitializer(c, parent, 0 /* ContextFlags.None */);
|
|
304
|
-
if (parentType === undefined && parent.kind !==
|
|
417
|
+
if (parentType === undefined && parent.kind !== 210 /* SyntaxKind.BindingElement */ && getInitializer(parent) !== undefined)
|
|
305
418
|
parentType = checkDeclarationInitializer(c, parent, element.dotDotDotToken !== undefined ? 32 /* CheckMode.RestBindingElement */ : 0 /* CheckMode.Normal */);
|
|
306
419
|
if (parentType === undefined)
|
|
307
420
|
return undefined;
|
|
308
421
|
const parentName = getName(parent);
|
|
309
|
-
if (parentName.kind ===
|
|
422
|
+
if (parentName.kind === 209 /* SyntaxKind.ArrayBindingPattern */) {
|
|
310
423
|
const index = getElements(parentName).nodes.indexOf(declaration);
|
|
311
424
|
if (index < 0)
|
|
312
425
|
return undefined;
|
|
@@ -498,7 +611,7 @@ function getSpreadIndices(c, node, elements) {
|
|
|
498
611
|
let first = -1;
|
|
499
612
|
let last = -1;
|
|
500
613
|
for (let i = 0; i < elements.length; i++)
|
|
501
|
-
if (elements[i].kind ===
|
|
614
|
+
if (elements[i].kind === 232 /* SyntaxKind.SpreadElement */) {
|
|
502
615
|
if (first < 0)
|
|
503
616
|
first = i;
|
|
504
617
|
last = i;
|
|
@@ -524,7 +637,7 @@ function getContextualTypeForObjectLiteralElement(c, element, contextFlags) {
|
|
|
524
637
|
let nameType = symbol !== undefined ? c.symbolNameTypes.get(getSymbolId(symbol)) : undefined;
|
|
525
638
|
// Late-bound members are named by the type of their computed name, like a unique symbol.
|
|
526
639
|
const nameNode = getName(element);
|
|
527
|
-
if (nameType === undefined && nameNode.kind ===
|
|
640
|
+
if (nameType === undefined && nameNode.kind === 169 /* SyntaxKind.ComputedPropertyName */)
|
|
528
641
|
nameType = checkComputedPropertyName(c, nameNode);
|
|
529
642
|
return getTypeOfPropertyOfContextualTypeEx(c, t, name, nameType);
|
|
530
643
|
}
|
|
@@ -629,7 +742,7 @@ function getTypeOfConcretePropertyOfContextualType(c, t, name) {
|
|
|
629
742
|
}
|
|
630
743
|
/** Whether the type of a mapped type property is being resolved. */
|
|
631
744
|
function isCircularMappedProperty(c, symbol) {
|
|
632
|
-
return ((symbol.checkFlags &
|
|
745
|
+
return ((symbol.checkFlags & 2097152 /* CheckFlags.Mapped */) !== 0 &&
|
|
633
746
|
c.symbolTypes.get(getSymbolId(symbol)) === undefined &&
|
|
634
747
|
findResolutionCycleStartIndex(c, symbol, 0 /* TypeSystemPropertyName.Type */) >= 0);
|
|
635
748
|
}
|
|
@@ -697,9 +810,9 @@ export function getApparentTypeOfContextualTypeEx(c, node, contextFlags) {
|
|
|
697
810
|
: mapTypeEx(c, t, (u) => ((u.objectFlags & 32 /* ObjectFlags.Mapped */) !== 0 ? u : getApparentType(c, u)), true);
|
|
698
811
|
if (apparentType === undefined)
|
|
699
812
|
return undefined;
|
|
700
|
-
if ((apparentType.flags & 134217728 /* TypeFlags.Union */) !== 0 && node.kind ===
|
|
813
|
+
if ((apparentType.flags & 134217728 /* TypeFlags.Union */) !== 0 && node.kind === 212 /* SyntaxKind.ObjectLiteralExpression */)
|
|
701
814
|
return discriminateContextualTypeByObjectMembers(c, node, apparentType);
|
|
702
|
-
if ((apparentType.flags & 134217728 /* TypeFlags.Union */) !== 0 && node.kind ===
|
|
815
|
+
if ((apparentType.flags & 134217728 /* TypeFlags.Union */) !== 0 && node.kind === 294 /* SyntaxKind.JsxAttributes */)
|
|
703
816
|
return discriminateContextualTypeByJSXAttributes(c, node, apparentType);
|
|
704
817
|
return apparentType;
|
|
705
818
|
}
|
|
@@ -732,10 +845,10 @@ function discriminateContextualTypeByObjectMembers(c, node, contextualType) {
|
|
|
732
845
|
const symbol = getSymbol(p);
|
|
733
846
|
if (symbol === undefined)
|
|
734
847
|
continue;
|
|
735
|
-
if ((p.kind ===
|
|
848
|
+
if ((p.kind === 304 /* SyntaxKind.PropertyAssignment */ &&
|
|
736
849
|
isPossiblyDiscriminantValue(p.initializer) &&
|
|
737
850
|
isDiscriminantProperty(c, contextualType, symbol.name)) ||
|
|
738
|
-
(p.kind ===
|
|
851
|
+
(p.kind === 305 /* SyntaxKind.ShorthandPropertyAssignment */ && isDiscriminantProperty(c, contextualType, symbol.name)))
|
|
739
852
|
props.push(p);
|
|
740
853
|
}
|
|
741
854
|
const nodeSymbol = getSymbol(node);
|
|
@@ -789,7 +902,7 @@ function getMatchingUnionConstituentForObjectLiteral(c, unionType, node) {
|
|
|
789
902
|
for (const p of getProperties(node).nodes) {
|
|
790
903
|
const symbol = getSymbol(p);
|
|
791
904
|
if (symbol !== undefined &&
|
|
792
|
-
p.kind ===
|
|
905
|
+
p.kind === 304 /* SyntaxKind.PropertyAssignment */ &&
|
|
793
906
|
symbol.name === keyPropertyName &&
|
|
794
907
|
isPossiblyDiscriminantValue(p.initializer)) {
|
|
795
908
|
propNode = p;
|
|
@@ -807,17 +920,17 @@ function isPossiblyDiscriminantValue(node) {
|
|
|
807
920
|
case 8 /* SyntaxKind.NumericLiteral */:
|
|
808
921
|
case 9 /* SyntaxKind.BigIntLiteral */:
|
|
809
922
|
case 14 /* SyntaxKind.NoSubstitutionTemplateLiteral */:
|
|
810
|
-
case
|
|
923
|
+
case 230 /* SyntaxKind.TemplateExpression */:
|
|
811
924
|
case 111 /* SyntaxKind.TrueKeyword */:
|
|
812
925
|
case 96 /* SyntaxKind.FalseKeyword */:
|
|
813
926
|
case 105 /* SyntaxKind.NullKeyword */:
|
|
814
927
|
case 79 /* SyntaxKind.Identifier */:
|
|
815
928
|
case 157 /* SyntaxKind.UndefinedKeyword */:
|
|
816
929
|
return true;
|
|
817
|
-
case
|
|
818
|
-
case
|
|
930
|
+
case 213 /* SyntaxKind.PropertyAccessExpression */:
|
|
931
|
+
case 219 /* SyntaxKind.ParenthesizedExpression */:
|
|
819
932
|
return isPossiblyDiscriminantValue(getExpression(node));
|
|
820
|
-
case
|
|
933
|
+
case 296 /* SyntaxKind.JsxExpression */: {
|
|
821
934
|
const expression = getExpression(node);
|
|
822
935
|
return expression === undefined || isPossiblyDiscriminantValue(expression);
|
|
823
936
|
}
|
|
@@ -912,7 +1025,7 @@ function discriminantMatches(c, props, index, t) {
|
|
|
912
1025
|
let propType;
|
|
913
1026
|
if (index < props.length) {
|
|
914
1027
|
const prop = props[index];
|
|
915
|
-
if (prop.kind ===
|
|
1028
|
+
if (prop.kind === 304 /* SyntaxKind.PropertyAssignment */)
|
|
916
1029
|
propType = getContextFreeTypeOfExpression(c, prop.initializer);
|
|
917
1030
|
else if (prop instanceof JsxAttribute)
|
|
918
1031
|
// An attribute without an initializer is `true`.
|
|
@@ -957,7 +1070,7 @@ export function hasContextSensitiveParameters(func) {
|
|
|
957
1070
|
for (const p of params)
|
|
958
1071
|
if (getType(p) === undefined)
|
|
959
1072
|
return true;
|
|
960
|
-
if (func.kind !==
|
|
1073
|
+
if (func.kind !== 221 /* SyntaxKind.ArrowFunction */) {
|
|
961
1074
|
// Without an explicit `this` parameter, the implicit one is contextually typed.
|
|
962
1075
|
if (params.length === 0 || !isThisParameter(params[0]))
|
|
963
1076
|
return (func.flags & 128 /* NodeFlags.ContainsThis */) !== 0;
|
|
@@ -1084,7 +1197,7 @@ export function getContextuallyTypedParameterType(c, parameter) {
|
|
|
1084
1197
|
}
|
|
1085
1198
|
/** The contextual type of an intra-expression inference site. */
|
|
1086
1199
|
export function getContextualTypeForInference(c, node) {
|
|
1087
|
-
return node.kind ===
|
|
1200
|
+
return node.kind === 176 /* SyntaxKind.MethodDeclaration */
|
|
1088
1201
|
? getContextualTypeForObjectLiteralElement(c, node, 2 /* ContextFlags.NoConstraints */)
|
|
1089
1202
|
: getContextualTypeEx(c, node, 2 /* ContextFlags.NoConstraints */);
|
|
1090
1203
|
}
|
|
@@ -1109,7 +1222,7 @@ function getThisTypeOfObjectLiteralFromContextualType(c, containingLiteral, cont
|
|
|
1109
1222
|
const thisType = getThisTypeFromContextualType(c, t);
|
|
1110
1223
|
if (thisType !== undefined)
|
|
1111
1224
|
return thisType;
|
|
1112
|
-
if (literal.parent.kind !==
|
|
1225
|
+
if (literal.parent.kind !== 304 /* SyntaxKind.PropertyAssignment */)
|
|
1113
1226
|
break;
|
|
1114
1227
|
literal = literal.parent.parent;
|
|
1115
1228
|
t = getApparentTypeOfContextualTypeEx(c, literal, 0 /* ContextFlags.None */);
|