mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-04 12:32:08 -06:00
Preserve partially typed tuple names in more places (#55789)
This commit is contained in:
parent
758884c093
commit
579e494f01
@ -33356,8 +33356,11 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
if (arg.kind === SyntaxKind.SyntheticExpression && (arg as SyntheticExpression).tupleNameSource) {
|
||||
names.push((arg as SyntheticExpression).tupleNameSource!);
|
||||
}
|
||||
else {
|
||||
names.push(undefined);
|
||||
}
|
||||
}
|
||||
return createTupleType(types, flags, inConstContext && !someType(restType, isMutableArrayLikeType), length(names) === length(types) ? names : undefined);
|
||||
return createTupleType(types, flags, inConstContext && !someType(restType, isMutableArrayLikeType), names);
|
||||
}
|
||||
|
||||
function checkTypeArguments(signature: Signature, typeArgumentNodes: readonly TypeNode[], reportErrors: boolean, headMessage?: DiagnosticMessage): Type[] | undefined {
|
||||
@ -35741,12 +35744,9 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
types.push(restType);
|
||||
flags.push(ElementFlags.Variadic);
|
||||
}
|
||||
const name = getNameableDeclarationAtPosition(source, i);
|
||||
if (name) {
|
||||
names.push(name);
|
||||
}
|
||||
names.push(getNameableDeclarationAtPosition(source, i));
|
||||
}
|
||||
return createTupleType(types, flags, readonly, length(names) === length(types) ? names : undefined);
|
||||
return createTupleType(types, flags, readonly, names);
|
||||
}
|
||||
|
||||
// Return the number of parameters in a signature. The rest parameter, if present, counts as one
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
index.js(1,25): error TS7006: Parameter 'f' implicitly has an 'any' type.
|
||||
index.js(13,29): error TS2345: Argument of type 'IArguments' is not assignable to parameter of type '[any?, ...any[]]'.
|
||||
index.js(13,29): error TS2345: Argument of type 'IArguments' is not assignable to parameter of type '[f?: any, ...any[]]'.
|
||||
|
||||
|
||||
==== index.js (2 errors) ====
|
||||
@ -19,6 +19,6 @@ index.js(13,29): error TS2345: Argument of type 'IArguments' is not assignable t
|
||||
const debuglog = function() {
|
||||
return format.apply(null, arguments);
|
||||
~~~~~~~~~
|
||||
!!! error TS2345: Argument of type 'IArguments' is not assignable to parameter of type '[any?, ...any[]]'.
|
||||
!!! error TS2345: Argument of type 'IArguments' is not assignable to parameter of type '[f?: any, ...any[]]'.
|
||||
};
|
||||
|
||||
17
tests/baselines/reference/partiallyNamedTuples3.js
Normal file
17
tests/baselines/reference/partiallyNamedTuples3.js
Normal file
@ -0,0 +1,17 @@
|
||||
//// [tests/cases/conformance/types/tuple/named/partiallyNamedTuples3.ts] ////
|
||||
|
||||
//// [partiallyNamedTuples3.ts]
|
||||
declare const tuple: [number, name: string, boolean, value: number, string];
|
||||
|
||||
const output = ((...args) => args)(...tuple);
|
||||
|
||||
|
||||
//// [partiallyNamedTuples3.js]
|
||||
"use strict";
|
||||
var output = (function () {
|
||||
var args = [];
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
args[_i] = arguments[_i];
|
||||
}
|
||||
return args;
|
||||
}).apply(void 0, tuple);
|
||||
12
tests/baselines/reference/partiallyNamedTuples3.symbols
Normal file
12
tests/baselines/reference/partiallyNamedTuples3.symbols
Normal file
@ -0,0 +1,12 @@
|
||||
//// [tests/cases/conformance/types/tuple/named/partiallyNamedTuples3.ts] ////
|
||||
|
||||
=== partiallyNamedTuples3.ts ===
|
||||
declare const tuple: [number, name: string, boolean, value: number, string];
|
||||
>tuple : Symbol(tuple, Decl(partiallyNamedTuples3.ts, 0, 13))
|
||||
|
||||
const output = ((...args) => args)(...tuple);
|
||||
>output : Symbol(output, Decl(partiallyNamedTuples3.ts, 2, 5))
|
||||
>args : Symbol(args, Decl(partiallyNamedTuples3.ts, 2, 17))
|
||||
>args : Symbol(args, Decl(partiallyNamedTuples3.ts, 2, 17))
|
||||
>tuple : Symbol(tuple, Decl(partiallyNamedTuples3.ts, 0, 13))
|
||||
|
||||
16
tests/baselines/reference/partiallyNamedTuples3.types
Normal file
16
tests/baselines/reference/partiallyNamedTuples3.types
Normal file
@ -0,0 +1,16 @@
|
||||
//// [tests/cases/conformance/types/tuple/named/partiallyNamedTuples3.ts] ////
|
||||
|
||||
=== partiallyNamedTuples3.ts ===
|
||||
declare const tuple: [number, name: string, boolean, value: number, string];
|
||||
>tuple : [number, name: string, boolean, value: number, string]
|
||||
|
||||
const output = ((...args) => args)(...tuple);
|
||||
>output : [number, name: string, boolean, value: number, string]
|
||||
>((...args) => args)(...tuple) : [number, name: string, boolean, value: number, string]
|
||||
>((...args) => args) : (args_0: number, name: string, args_2: boolean, value: number, args_4: string) => [number, name: string, boolean, value: number, string]
|
||||
>(...args) => args : (args_0: number, name: string, args_2: boolean, value: number, args_4: string) => [number, name: string, boolean, value: number, string]
|
||||
>args : [number, name: string, boolean, value: number, string]
|
||||
>args : [number, name: string, boolean, value: number, string]
|
||||
>...tuple : string | number | boolean
|
||||
>tuple : [number, name: string, boolean, value: number, string]
|
||||
|
||||
@ -265,8 +265,8 @@ f3((a, b, c) => {})
|
||||
f3((...x) => {})
|
||||
>f3((...x) => {}) : void
|
||||
>f3 : (cb: (x: number, args_0: boolean, ...args_1: string[]) => void) => void
|
||||
>(...x) => {} : (x_0: number, x_1: boolean, ...x_2: string[]) => void
|
||||
>x : [number, boolean, ...string[]]
|
||||
>(...x) => {} : (x: number, x_1: boolean, ...x_2: string[]) => void
|
||||
>x : [x: number, boolean, ...string[]]
|
||||
|
||||
f3((a, ...x) => {})
|
||||
>f3((a, ...x) => {}) : void
|
||||
|
||||
@ -0,0 +1,6 @@
|
||||
// @strict: true
|
||||
// @lib: esnext
|
||||
|
||||
declare const tuple: [number, name: string, boolean, value: number, string];
|
||||
|
||||
const output = ((...args) => args)(...tuple);
|
||||
Loading…
x
Reference in New Issue
Block a user