From b836d23fa5be6ad3458f41a08eec7e4ba068e931 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Sun, 15 Sep 2024 23:15:39 +0200 Subject: [PATCH 1/2] Only pad initializer types for parameters without annotations --- src/compiler/checker.ts | 4 +- ...rameterDeclaration10(strict=false).symbols | 39 ++++++++++++ ...ParameterDeclaration10(strict=false).types | 62 +++++++++++++++++++ ...arameterDeclaration10(strict=true).symbols | 39 ++++++++++++ ...gParameterDeclaration10(strict=true).types | 62 +++++++++++++++++++ ...arameterDeclaration9(strict=false).symbols | 37 +++++++++++ ...gParameterDeclaration9(strict=false).types | 61 ++++++++++++++++++ ...ameterDeclaration9(strict=true).errors.txt | 26 ++++++++ ...ParameterDeclaration9(strict=true).symbols | 35 +++++++++++ ...ngParameterDeclaration9(strict=true).types | 61 ++++++++++++++++++ .../destructuringParameterDeclaration10.ts | 20 ++++++ .../destructuringParameterDeclaration9.ts | 28 +++++++++ 12 files changed, 473 insertions(+), 1 deletion(-) create mode 100644 tests/baselines/reference/destructuringParameterDeclaration10(strict=false).symbols create mode 100644 tests/baselines/reference/destructuringParameterDeclaration10(strict=false).types create mode 100644 tests/baselines/reference/destructuringParameterDeclaration10(strict=true).symbols create mode 100644 tests/baselines/reference/destructuringParameterDeclaration10(strict=true).types create mode 100644 tests/baselines/reference/destructuringParameterDeclaration9(strict=false).symbols create mode 100644 tests/baselines/reference/destructuringParameterDeclaration9(strict=false).types create mode 100644 tests/baselines/reference/destructuringParameterDeclaration9(strict=true).errors.txt create mode 100644 tests/baselines/reference/destructuringParameterDeclaration9(strict=true).symbols create mode 100644 tests/baselines/reference/destructuringParameterDeclaration9(strict=true).types create mode 100644 tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration10.ts create mode 100644 tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration9.ts diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 4d4f1bf69a808..c47727ff87f82 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -40551,7 +40551,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { const type = getQuickTypeOfExpression(initializer) || (contextualType ? checkExpressionWithContextualType(initializer, contextualType, /*inferenceContext*/ undefined, checkMode || CheckMode.Normal) : checkExpressionCached(initializer, checkMode)); - if (isParameter(isBindingElement(declaration) ? walkUpBindingElementsAndPatterns(declaration) : declaration)) { + + const rootDeclaration = getRootDeclaration(declaration); + if (isParameter(rootDeclaration) && !getEffectiveTypeAnnotationNode(rootDeclaration)) { if (declaration.name.kind === SyntaxKind.ObjectBindingPattern && isObjectLiteralType(type)) { return padObjectLiteralType(type as ObjectType, declaration.name); } diff --git a/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).symbols b/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).symbols new file mode 100644 index 0000000000000..fd1f1e8e0ce74 --- /dev/null +++ b/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).symbols @@ -0,0 +1,39 @@ +//// [tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration10.ts] //// + +=== destructuringParameterDeclaration10.ts === +export function prepareConfig({ +>prepareConfig : Symbol(prepareConfig, Decl(destructuringParameterDeclaration10.ts, 0, 0)) + + additionalFiles: { +>additionalFiles : Symbol(additionalFiles, Decl(destructuringParameterDeclaration10.ts, 4, 4)) + + json = [] +>json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 1, 22)) + + } = {} +}: { + additionalFiles?: Partial>; +>additionalFiles : Symbol(additionalFiles, Decl(destructuringParameterDeclaration10.ts, 4, 4)) +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) + +} = {}) { + json // string[] +>json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 1, 22)) +} + +export function prepareConfigWithoutAnnotation({ +>prepareConfigWithoutAnnotation : Symbol(prepareConfigWithoutAnnotation, Decl(destructuringParameterDeclaration10.ts, 8, 1)) + + additionalFiles: { +>additionalFiles : Symbol(additionalFiles) + + json = [] +>json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 11, 22)) + + } = {} +} = {}) { + json +>json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 11, 22)) +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).types b/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).types new file mode 100644 index 0000000000000..81e3f36579bed --- /dev/null +++ b/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).types @@ -0,0 +1,62 @@ +//// [tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration10.ts] //// + +=== destructuringParameterDeclaration10.ts === +export function prepareConfig({ +>prepareConfig : ({ additionalFiles: { json } }?: { additionalFiles?: Partial>; }) => void +> : ^ ^^^ ^^^^^^^^^ + + additionalFiles: { +>additionalFiles : any +> : ^^^ + + json = [] +>json : string[] +> : ^^^^^^^^ +>[] : undefined[] +> : ^^^^^^^^^^^ + + } = {} +>{} : {} +> : ^^ + +}: { + additionalFiles?: Partial>; +>additionalFiles : Partial> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +} = {}) { +>{} : {} +> : ^^ + + json // string[] +>json : string[] +> : ^^^^^^^^ +} + +export function prepareConfigWithoutAnnotation({ +>prepareConfigWithoutAnnotation : ({ additionalFiles: { json } }?: { additionalFiles?: { json?: any[]; }; }) => void +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + additionalFiles: { +>additionalFiles : any +> : ^^^ + + json = [] +>json : any[] +> : ^^^^^ +>[] : undefined[] +> : ^^^^^^^^^^^ + + } = {} +>{} : {} +> : ^^ + +} = {}) { +>{} : {} +> : ^^ + + json +>json : any[] +> : ^^^^^ +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).symbols b/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).symbols new file mode 100644 index 0000000000000..fd1f1e8e0ce74 --- /dev/null +++ b/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).symbols @@ -0,0 +1,39 @@ +//// [tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration10.ts] //// + +=== destructuringParameterDeclaration10.ts === +export function prepareConfig({ +>prepareConfig : Symbol(prepareConfig, Decl(destructuringParameterDeclaration10.ts, 0, 0)) + + additionalFiles: { +>additionalFiles : Symbol(additionalFiles, Decl(destructuringParameterDeclaration10.ts, 4, 4)) + + json = [] +>json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 1, 22)) + + } = {} +}: { + additionalFiles?: Partial>; +>additionalFiles : Symbol(additionalFiles, Decl(destructuringParameterDeclaration10.ts, 4, 4)) +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) + +} = {}) { + json // string[] +>json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 1, 22)) +} + +export function prepareConfigWithoutAnnotation({ +>prepareConfigWithoutAnnotation : Symbol(prepareConfigWithoutAnnotation, Decl(destructuringParameterDeclaration10.ts, 8, 1)) + + additionalFiles: { +>additionalFiles : Symbol(additionalFiles) + + json = [] +>json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 11, 22)) + + } = {} +} = {}) { + json +>json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 11, 22)) +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).types b/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).types new file mode 100644 index 0000000000000..b698c2b809b9f --- /dev/null +++ b/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).types @@ -0,0 +1,62 @@ +//// [tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration10.ts] //// + +=== destructuringParameterDeclaration10.ts === +export function prepareConfig({ +>prepareConfig : ({ additionalFiles: { json } }?: { additionalFiles?: Partial>; }) => void +> : ^ ^^^ ^^^^^^^^^ + + additionalFiles: { +>additionalFiles : any +> : ^^^ + + json = [] +>json : string[] +> : ^^^^^^^^ +>[] : never[] +> : ^^^^^^^ + + } = {} +>{} : {} +> : ^^ + +}: { + additionalFiles?: Partial>; +>additionalFiles : Partial> | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +} = {}) { +>{} : {} +> : ^^ + + json // string[] +>json : string[] +> : ^^^^^^^^ +} + +export function prepareConfigWithoutAnnotation({ +>prepareConfigWithoutAnnotation : ({ additionalFiles: { json } }?: { additionalFiles?: { json?: never[] | undefined; } | undefined; }) => void +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + additionalFiles: { +>additionalFiles : any +> : ^^^ + + json = [] +>json : never[] +> : ^^^^^^^ +>[] : never[] +> : ^^^^^^^ + + } = {} +>{} : {} +> : ^^ + +} = {}) { +>{} : {} +> : ^^ + + json +>json : never[] +> : ^^^^^^^ +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).symbols b/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).symbols new file mode 100644 index 0000000000000..18dcf54dcb90b --- /dev/null +++ b/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).symbols @@ -0,0 +1,37 @@ +//// [tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration9.ts] //// + +=== index.js === +/** + * @param {Object} [config] + * @param {Partial>} [config.additionalFiles] + */ +export function prepareConfig({ +>prepareConfig : Symbol(prepareConfig, Decl(index.js, 0, 0)) + + additionalFiles: { +>additionalFiles : Symbol(additionalFiles, Decl(index.js, 2, 3)) + + json = [] +>json : Symbol(json, Decl(index.js, 5, 22)) + + } = {} +} = {}) { + json // string[] +>json : Symbol(json, Decl(index.js, 5, 22)) +} + +export function prepareConfigWithoutAnnotation({ +>prepareConfigWithoutAnnotation : Symbol(prepareConfigWithoutAnnotation, Decl(index.js, 10, 1)) + + additionalFiles: { +>additionalFiles : Symbol(additionalFiles) + + json = [] +>json : Symbol(json, Decl(index.js, 13, 22)) + + } = {} +} = {}) { + json +>json : Symbol(json, Decl(index.js, 13, 22)) +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).types b/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).types new file mode 100644 index 0000000000000..53ad4a9c3f843 --- /dev/null +++ b/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).types @@ -0,0 +1,61 @@ +//// [tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration9.ts] //// + +=== index.js === +/** + * @param {Object} [config] + * @param {Partial>} [config.additionalFiles] + */ +export function prepareConfig({ +>prepareConfig : ({ additionalFiles: { json } }?: { additionalFiles?: Partial>;}) => void +> : ^ ^^^ ^^^ ^ ^^^^^^^^^ + + additionalFiles: { +>additionalFiles : any +> : ^^^ + + json = [] +>json : string[] +> : ^^^^^^^^ +>[] : undefined[] +> : ^^^^^^^^^^^ + + } = {} +>{} : {} +> : ^^ + +} = {}) { +>{} : {} +> : ^^ + + json // string[] +>json : string[] +> : ^^^^^^^^ +} + +export function prepareConfigWithoutAnnotation({ +>prepareConfigWithoutAnnotation : ({ additionalFiles: { json } }?: { additionalFiles?: { json?: any[]; }; }) => void +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + additionalFiles: { +>additionalFiles : any +> : ^^^ + + json = [] +>json : any[] +> : ^^^^^ +>[] : undefined[] +> : ^^^^^^^^^^^ + + } = {} +>{} : {} +> : ^^ + +} = {}) { +>{} : {} +> : ^^ + + json +>json : any[] +> : ^^^^^ +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).errors.txt b/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).errors.txt new file mode 100644 index 0000000000000..c94833ea87ee9 --- /dev/null +++ b/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).errors.txt @@ -0,0 +1,26 @@ +index.js(15,9): error TS7031: Binding element 'json' implicitly has an 'any[]' type. + + +==== index.js (1 errors) ==== + /** + * @param {Object} [config] + * @param {Partial>} [config.additionalFiles] + */ + export function prepareConfig({ + additionalFiles: { + json = [] + } = {} + } = {}) { + json // string[] + } + + export function prepareConfigWithoutAnnotation({ + additionalFiles: { + json = [] + ~~~~ +!!! error TS7031: Binding element 'json' implicitly has an 'any[]' type. + } = {} + } = {}) { + json + } + \ No newline at end of file diff --git a/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).symbols b/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).symbols new file mode 100644 index 0000000000000..2c1a95d7fad12 --- /dev/null +++ b/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).symbols @@ -0,0 +1,35 @@ +//// [tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration9.ts] //// + +=== index.js === +/** + * @param {Object} [config] + * @param {Partial>} [config.additionalFiles] + */ +export function prepareConfig({ +>prepareConfig : Symbol(prepareConfig, Decl(index.js, 0, 0)) + + additionalFiles: { + json = [] +>json : Symbol(json, Decl(index.js, 5, 22)) + + } = {} +} = {}) { + json // string[] +>json : Symbol(json, Decl(index.js, 5, 22)) +} + +export function prepareConfigWithoutAnnotation({ +>prepareConfigWithoutAnnotation : Symbol(prepareConfigWithoutAnnotation, Decl(index.js, 10, 1)) + + additionalFiles: { +>additionalFiles : Symbol(additionalFiles) + + json = [] +>json : Symbol(json, Decl(index.js, 13, 22)) + + } = {} +} = {}) { + json +>json : Symbol(json, Decl(index.js, 13, 22)) +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).types b/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).types new file mode 100644 index 0000000000000..811e63796f181 --- /dev/null +++ b/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).types @@ -0,0 +1,61 @@ +//// [tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration9.ts] //// + +=== index.js === +/** + * @param {Object} [config] + * @param {Partial>} [config.additionalFiles] + */ +export function prepareConfig({ +>prepareConfig : ({ additionalFiles: { json } }?: { additionalFiles?: Partial> | undefined; } | undefined) => void +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + additionalFiles: { +>additionalFiles : any +> : ^^^ + + json = [] +>json : string[] +> : ^^^^^^^^ +>[] : never[] +> : ^^^^^^^ + + } = {} +>{} : {} +> : ^^ + +} = {}) { +>{} : {} +> : ^^ + + json // string[] +>json : string[] +> : ^^^^^^^^ +} + +export function prepareConfigWithoutAnnotation({ +>prepareConfigWithoutAnnotation : ({ additionalFiles: { json } }?: { additionalFiles?: { json?: any[] | undefined; } | undefined; }) => void +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + + additionalFiles: { +>additionalFiles : any +> : ^^^ + + json = [] +>json : any[] +> : ^^^^^ +>[] : never[] +> : ^^^^^^^ + + } = {} +>{} : {} +> : ^^ + +} = {}) { +>{} : {} +> : ^^ + + json +>json : any[] +> : ^^^^^ +} + diff --git a/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration10.ts b/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration10.ts new file mode 100644 index 0000000000000..459f532a11cb9 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration10.ts @@ -0,0 +1,20 @@ +// @strict: true, false +// @noEmit: true + +export function prepareConfig({ + additionalFiles: { + json = [] + } = {} +}: { + additionalFiles?: Partial>; +} = {}) { + json // string[] +} + +export function prepareConfigWithoutAnnotation({ + additionalFiles: { + json = [] + } = {} +} = {}) { + json +} diff --git a/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration9.ts b/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration9.ts new file mode 100644 index 0000000000000..e2685e73eecf9 --- /dev/null +++ b/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration9.ts @@ -0,0 +1,28 @@ +// @strict: true, false +// @noEmit: true +// @allowJs: true +// @checkJs: true + +// https://github.com/microsoft/TypeScript/issues/59936 + +// @filename: index.js + +/** + * @param {Object} [config] + * @param {Partial>} [config.additionalFiles] + */ +export function prepareConfig({ + additionalFiles: { + json = [] + } = {} +} = {}) { + json // string[] +} + +export function prepareConfigWithoutAnnotation({ + additionalFiles: { + json = [] + } = {} +} = {}) { + json +} From 909bac282e05fafa4b0961f4465ee08b642c2450 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mateusz=20Burzy=C5=84ski?= Date: Tue, 17 Sep 2024 11:39:27 +0200 Subject: [PATCH 2/2] dont pad contextually-typed parameters either --- src/compiler/checker.ts | 2 +- ...rameterDeclaration10(strict=false).symbols | 22 +++++++++++ ...ParameterDeclaration10(strict=false).types | 37 +++++++++++++++++++ ...arameterDeclaration10(strict=true).symbols | 22 +++++++++++ ...gParameterDeclaration10(strict=true).types | 37 +++++++++++++++++++ ...arameterDeclaration9(strict=false).symbols | 18 +++++++++ ...gParameterDeclaration9(strict=false).types | 32 ++++++++++++++++ ...ameterDeclaration9(strict=true).errors.txt | 11 ++++++ ...ParameterDeclaration9(strict=true).symbols | 18 +++++++++ ...ngParameterDeclaration9(strict=true).types | 32 ++++++++++++++++ .../destructuringParameterDeclaration10.ts | 10 +++++ .../destructuringParameterDeclaration9.ts | 11 ++++++ 12 files changed, 251 insertions(+), 1 deletion(-) diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index c47727ff87f82..a4d7bcda3c31b 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -40553,7 +40553,7 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker { checkExpressionCached(initializer, checkMode)); const rootDeclaration = getRootDeclaration(declaration); - if (isParameter(rootDeclaration) && !getEffectiveTypeAnnotationNode(rootDeclaration)) { + if (isParameter(rootDeclaration) && !getEffectiveTypeAnnotationNode(rootDeclaration) && (!isFunctionLikeDeclaration(rootDeclaration.parent) || !getContextualSignatureForFunctionLikeDeclaration(rootDeclaration.parent))) { if (declaration.name.kind === SyntaxKind.ObjectBindingPattern && isObjectLiteralType(type)) { return padObjectLiteralType(type as ObjectType, declaration.name); } diff --git a/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).symbols b/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).symbols index fd1f1e8e0ce74..a0da095b3f6de 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).symbols +++ b/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).symbols @@ -37,3 +37,25 @@ export function prepareConfigWithoutAnnotation({ >json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 11, 22)) } +export const prepareConfigWithContextualSignature: (param:{ +>prepareConfigWithContextualSignature : Symbol(prepareConfigWithContextualSignature, Decl(destructuringParameterDeclaration10.ts, 18, 12)) +>param : Symbol(param, Decl(destructuringParameterDeclaration10.ts, 18, 52)) + + additionalFiles?: Partial>; +>additionalFiles : Symbol(additionalFiles, Decl(destructuringParameterDeclaration10.ts, 18, 59)) +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) + +}) => void = ({ + additionalFiles: { +>additionalFiles : Symbol(additionalFiles, Decl(destructuringParameterDeclaration10.ts, 18, 59)) + + json = [] +>json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 21, 22)) + + } = {} +} = {}) => { + json // string[] +>json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 21, 22)) +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).types b/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).types index 81e3f36579bed..721d45fc041df 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).types +++ b/tests/baselines/reference/destructuringParameterDeclaration10(strict=false).types @@ -60,3 +60,40 @@ export function prepareConfigWithoutAnnotation({ > : ^^^^^ } +export const prepareConfigWithContextualSignature: (param:{ +>prepareConfigWithContextualSignature : (param: { additionalFiles?: Partial>; }) => void +> : ^ ^^ ^^^^^ +>param : { additionalFiles?: Partial>; } +> : ^^^^^^^^^^^^^^^^^^^^ ^^^ + + additionalFiles?: Partial>; +>additionalFiles : Partial> +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +}) => void = ({ +>({ additionalFiles: { json = [] } = {}} = {}) => { json // string[]} : ({ additionalFiles: { json } }?: { additionalFiles?: Partial>; }) => void +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ + + additionalFiles: { +>additionalFiles : any +> : ^^^ + + json = [] +>json : string[] +> : ^^^^^^^^ +>[] : undefined[] +> : ^^^^^^^^^^^ + + } = {} +>{} : {} +> : ^^ + +} = {}) => { +>{} : {} +> : ^^ + + json // string[] +>json : string[] +> : ^^^^^^^^ +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).symbols b/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).symbols index fd1f1e8e0ce74..a0da095b3f6de 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).symbols +++ b/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).symbols @@ -37,3 +37,25 @@ export function prepareConfigWithoutAnnotation({ >json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 11, 22)) } +export const prepareConfigWithContextualSignature: (param:{ +>prepareConfigWithContextualSignature : Symbol(prepareConfigWithContextualSignature, Decl(destructuringParameterDeclaration10.ts, 18, 12)) +>param : Symbol(param, Decl(destructuringParameterDeclaration10.ts, 18, 52)) + + additionalFiles?: Partial>; +>additionalFiles : Symbol(additionalFiles, Decl(destructuringParameterDeclaration10.ts, 18, 59)) +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) +>Record : Symbol(Record, Decl(lib.es5.d.ts, --, --)) + +}) => void = ({ + additionalFiles: { +>additionalFiles : Symbol(additionalFiles, Decl(destructuringParameterDeclaration10.ts, 18, 59)) + + json = [] +>json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 21, 22)) + + } = {} +} = {}) => { + json // string[] +>json : Symbol(json, Decl(destructuringParameterDeclaration10.ts, 21, 22)) +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).types b/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).types index b698c2b809b9f..6eabd387b0b59 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).types +++ b/tests/baselines/reference/destructuringParameterDeclaration10(strict=true).types @@ -60,3 +60,40 @@ export function prepareConfigWithoutAnnotation({ > : ^^^^^^^ } +export const prepareConfigWithContextualSignature: (param:{ +>prepareConfigWithContextualSignature : (param: { additionalFiles?: Partial>; }) => void +> : ^ ^^ ^^^^^ +>param : { additionalFiles?: Partial>; } +> : ^^^^^^^^^^^^^^^^^^^^ ^^^ + + additionalFiles?: Partial>; +>additionalFiles : Partial> | undefined +> : ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ + +}) => void = ({ +>({ additionalFiles: { json = [] } = {}} = {}) => { json // string[]} : ({ additionalFiles: { json } }?: { additionalFiles?: Partial>; }) => void +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^^^^^ + + additionalFiles: { +>additionalFiles : any +> : ^^^ + + json = [] +>json : string[] +> : ^^^^^^^^ +>[] : never[] +> : ^^^^^^^ + + } = {} +>{} : {} +> : ^^ + +} = {}) => { +>{} : {} +> : ^^ + + json // string[] +>json : string[] +> : ^^^^^^^^ +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).symbols b/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).symbols index 18dcf54dcb90b..127c4c64cc1a9 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).symbols +++ b/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).symbols @@ -35,3 +35,21 @@ export function prepareConfigWithoutAnnotation({ >json : Symbol(json, Decl(index.js, 13, 22)) } +/** @type {(param: { + additionalFiles?: Partial>; +}) => void} */ +export const prepareConfigWithContextualSignature = ({ +>prepareConfigWithContextualSignature : Symbol(prepareConfigWithContextualSignature, Decl(index.js, 23, 12)) + + additionalFiles: { +>additionalFiles : Symbol(additionalFiles, Decl(index.js, 20, 20)) + + json = [] +>json : Symbol(json, Decl(index.js, 24, 22)) + + } = {} +} = {})=> { + json // string[] +>json : Symbol(json, Decl(index.js, 24, 22)) +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).types b/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).types index 53ad4a9c3f843..231de2170a2d4 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).types +++ b/tests/baselines/reference/destructuringParameterDeclaration9(strict=false).types @@ -59,3 +59,35 @@ export function prepareConfigWithoutAnnotation({ > : ^^^^^ } +/** @type {(param: { + additionalFiles?: Partial>; +}) => void} */ +export const prepareConfigWithContextualSignature = ({ +>prepareConfigWithContextualSignature : (param: { additionalFiles?: Partial>; }) => void +> : ^ ^^ ^^^^^ +>({ additionalFiles: { json = [] } = {}} = {})=> { json // string[]} : ({ additionalFiles: { json } }?: { additionalFiles?: Partial>; }) => void +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ + + additionalFiles: { +>additionalFiles : any +> : ^^^ + + json = [] +>json : string[] +> : ^^^^^^^^ +>[] : undefined[] +> : ^^^^^^^^^^^ + + } = {} +>{} : {} +> : ^^ + +} = {})=> { +>{} : {} +> : ^^ + + json // string[] +>json : string[] +> : ^^^^^^^^ +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).errors.txt b/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).errors.txt index c94833ea87ee9..cdd292b614585 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).errors.txt +++ b/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).errors.txt @@ -23,4 +23,15 @@ index.js(15,9): error TS7031: Binding element 'json' implicitly has an 'any[]' t } = {}) { json } + + /** @type {(param: { + additionalFiles?: Partial>; + }) => void} */ + export const prepareConfigWithContextualSignature = ({ + additionalFiles: { + json = [] + } = {} + } = {})=> { + json // string[] + } \ No newline at end of file diff --git a/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).symbols b/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).symbols index 2c1a95d7fad12..85239422f8f2a 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).symbols +++ b/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).symbols @@ -33,3 +33,21 @@ export function prepareConfigWithoutAnnotation({ >json : Symbol(json, Decl(index.js, 13, 22)) } +/** @type {(param: { + additionalFiles?: Partial>; +}) => void} */ +export const prepareConfigWithContextualSignature = ({ +>prepareConfigWithContextualSignature : Symbol(prepareConfigWithContextualSignature, Decl(index.js, 23, 12)) + + additionalFiles: { +>additionalFiles : Symbol(additionalFiles, Decl(index.js, 20, 20)) + + json = [] +>json : Symbol(json, Decl(index.js, 24, 22)) + + } = {} +} = {})=> { + json // string[] +>json : Symbol(json, Decl(index.js, 24, 22)) +} + diff --git a/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).types b/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).types index 811e63796f181..f8282bd750e39 100644 --- a/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).types +++ b/tests/baselines/reference/destructuringParameterDeclaration9(strict=true).types @@ -59,3 +59,35 @@ export function prepareConfigWithoutAnnotation({ > : ^^^^^ } +/** @type {(param: { + additionalFiles?: Partial>; +}) => void} */ +export const prepareConfigWithContextualSignature = ({ +>prepareConfigWithContextualSignature : (param: { additionalFiles?: Partial>; }) => void +> : ^ ^^ ^^^^^ +>({ additionalFiles: { json = [] } = {}} = {})=> { json // string[]} : ({ additionalFiles: { json } }?: { additionalFiles?: Partial>; }) => void +> : ^ ^^^^^^^^^^^^^^^^^^^^^^^ ^^^^^^^^ + + additionalFiles: { +>additionalFiles : any +> : ^^^ + + json = [] +>json : string[] +> : ^^^^^^^^ +>[] : never[] +> : ^^^^^^^ + + } = {} +>{} : {} +> : ^^ + +} = {})=> { +>{} : {} +> : ^^ + + json // string[] +>json : string[] +> : ^^^^^^^^ +} + diff --git a/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration10.ts b/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration10.ts index 459f532a11cb9..997341c7cb1a6 100644 --- a/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration10.ts +++ b/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration10.ts @@ -18,3 +18,13 @@ export function prepareConfigWithoutAnnotation({ } = {}) { json } + +export const prepareConfigWithContextualSignature: (param:{ + additionalFiles?: Partial>; +}) => void = ({ + additionalFiles: { + json = [] + } = {} +} = {}) => { + json // string[] +} diff --git a/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration9.ts b/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration9.ts index e2685e73eecf9..d5e23c5144598 100644 --- a/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration9.ts +++ b/tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration9.ts @@ -26,3 +26,14 @@ export function prepareConfigWithoutAnnotation({ } = {}) { json } + +/** @type {(param: { + additionalFiles?: Partial>; +}) => void} */ +export const prepareConfigWithContextualSignature = ({ + additionalFiles: { + json = [] + } = {} +} = {})=> { + json // string[] +}