mirror of
https://github.com/microsoft/TypeScript.git
synced 2026-02-04 21:53:42 -06:00
Fixed display of optional and rest parameters created as result of combining union parameters (#55625)
This commit is contained in:
parent
3f0c62bf02
commit
543d7ed00c
@ -13202,12 +13202,13 @@ export function createTypeChecker(host: TypeCheckerHost): TypeChecker {
|
||||
const paramSymbol = createSymbol(
|
||||
SymbolFlags.FunctionScopedVariable | (isOptional && !isRestParam ? SymbolFlags.Optional : 0),
|
||||
paramName || `arg${i}` as __String,
|
||||
isRestParam ? CheckFlags.RestParameter : isOptional ? CheckFlags.OptionalParameter : 0,
|
||||
);
|
||||
paramSymbol.links.type = isRestParam ? createArrayType(unionParamType) : unionParamType;
|
||||
params[i] = paramSymbol;
|
||||
}
|
||||
if (needsExtraRestElement) {
|
||||
const restParamSymbol = createSymbol(SymbolFlags.FunctionScopedVariable, "args" as __String);
|
||||
const restParamSymbol = createSymbol(SymbolFlags.FunctionScopedVariable, "args" as __String, CheckFlags.RestParameter);
|
||||
restParamSymbol.links.type = createArrayType(getTypeAtPosition(shorter, longestCount));
|
||||
if (shorter === right) {
|
||||
restParamSymbol.links.type = instantiateType(restParamSymbol.links.type, mapper);
|
||||
|
||||
@ -6,25 +6,25 @@
|
||||
// | (method) Array<T>.concat(...items: ConcatArray<string | number>[]): (string | number)[] (+1 overload)
|
||||
// | (method) Array<T>.every<S>(predicate: (value: string | number, index: number, array: (string | number)[]) => value is S, thisArg?: any): this is S[] (+1 overload)
|
||||
// | (method) Array<T>.filter<S>(predicate: (value: string | number, index: number, array: (string | number)[]) => value is S, thisArg?: any): S[] (+1 overload)
|
||||
// | (method) Array<T>.forEach(callbackfn: ((value: string, index: number, array: string[]) => void) & ((value: number, index: number, array: number[]) => void), thisArg: any): void
|
||||
// | (method) Array<T>.indexOf(searchElement: never, fromIndex: number): number
|
||||
// | (method) Array<T>.forEach(callbackfn: ((value: string, index: number, array: string[]) => void) & ((value: number, index: number, array: number[]) => void), thisArg?: any): void
|
||||
// | (method) Array<T>.indexOf(searchElement: never, fromIndex?: number): number
|
||||
// | (method) Array<T>.join(separator?: string): string
|
||||
// | (method) Array<T>.lastIndexOf(searchElement: never, fromIndex: number): number
|
||||
// | (method) Array<T>.lastIndexOf(searchElement: never, fromIndex?: number): number
|
||||
// | (property) Array<T>.length: number
|
||||
// | (method) Array<T>.map<unknown>(callbackfn: ((value: string, index: number, array: string[]) => unknown) & ((value: number, index: number, array: number[]) => unknown), thisArg: any): unknown[]
|
||||
// | (method) Array<T>.map<unknown>(callbackfn: ((value: string, index: number, array: string[]) => unknown) & ((value: number, index: number, array: number[]) => unknown), thisArg?: any): unknown[]
|
||||
// | (method) Array<T>.pop(): string | number
|
||||
// | (method) Array<T>.push(items: never[]): number
|
||||
// | (method) Array<T>.push(...items: never[]): number
|
||||
// | (method) Array<T>.reduce(callbackfn: (previousValue: string | number, currentValue: string | number, currentIndex: number, array: (string | number)[]) => string | number): string | number (+2 overloads)
|
||||
// | (method) Array<T>.reduceRight(callbackfn: (previousValue: string | number, currentValue: string | number, currentIndex: number, array: (string | number)[]) => string | number): string | number (+2 overloads)
|
||||
// | (method) Array<T>.reverse(): string[] | number[]
|
||||
// | (method) Array<T>.shift(): string | number
|
||||
// | (method) Array<T>.slice(start?: number, end?: number): string[] | number[]
|
||||
// | (method) Array<T>.some(predicate: ((value: string, index: number, array: string[]) => unknown) & ((value: number, index: number, array: number[]) => unknown), thisArg: any): boolean
|
||||
// | (method) Array<T>.sort(compareFn: ((a: string, b: string) => number) & ((a: number, b: number) => number)): string[] | number[]
|
||||
// | (method) Array<T>.some(predicate: ((value: string, index: number, array: string[]) => unknown) & ((value: number, index: number, array: number[]) => unknown), thisArg?: any): boolean
|
||||
// | (method) Array<T>.sort(compareFn?: ((a: string, b: string) => number) & ((a: number, b: number) => number)): string[] | number[]
|
||||
// | (method) Array<T>.splice(start: number, deleteCount?: number): string[] | number[] (+2 overloads)
|
||||
// | (method) Array<T>.toLocaleString(): string
|
||||
// | (method) Array<T>.toString(): string
|
||||
// | (method) Array<T>.unshift(items: never[]): number
|
||||
// | (method) Array<T>.unshift(...items: never[]): number
|
||||
// | ----------------------------------------------------------------------
|
||||
|
||||
[
|
||||
@ -1263,6 +1263,10 @@
|
||||
"text": "thisArg",
|
||||
"kind": "parameterName"
|
||||
},
|
||||
{
|
||||
"text": "?",
|
||||
"kind": "punctuation"
|
||||
},
|
||||
{
|
||||
"text": ":",
|
||||
"kind": "punctuation"
|
||||
@ -1413,6 +1417,10 @@
|
||||
"text": "fromIndex",
|
||||
"kind": "parameterName"
|
||||
},
|
||||
{
|
||||
"text": "?",
|
||||
"kind": "punctuation"
|
||||
},
|
||||
{
|
||||
"text": ":",
|
||||
"kind": "punctuation"
|
||||
@ -1676,6 +1684,10 @@
|
||||
"text": "fromIndex",
|
||||
"kind": "parameterName"
|
||||
},
|
||||
{
|
||||
"text": "?",
|
||||
"kind": "punctuation"
|
||||
},
|
||||
{
|
||||
"text": ":",
|
||||
"kind": "punctuation"
|
||||
@ -2120,6 +2132,10 @@
|
||||
"text": "thisArg",
|
||||
"kind": "parameterName"
|
||||
},
|
||||
{
|
||||
"text": "?",
|
||||
"kind": "punctuation"
|
||||
},
|
||||
{
|
||||
"text": ":",
|
||||
"kind": "punctuation"
|
||||
@ -2340,6 +2356,10 @@
|
||||
"text": "(",
|
||||
"kind": "punctuation"
|
||||
},
|
||||
{
|
||||
"text": "...",
|
||||
"kind": "punctuation"
|
||||
},
|
||||
{
|
||||
"text": "items",
|
||||
"kind": "parameterName"
|
||||
@ -3803,6 +3823,10 @@
|
||||
"text": "thisArg",
|
||||
"kind": "parameterName"
|
||||
},
|
||||
{
|
||||
"text": "?",
|
||||
"kind": "punctuation"
|
||||
},
|
||||
{
|
||||
"text": ":",
|
||||
"kind": "punctuation"
|
||||
@ -3929,6 +3953,10 @@
|
||||
"text": "compareFn",
|
||||
"kind": "parameterName"
|
||||
},
|
||||
{
|
||||
"text": "?",
|
||||
"kind": "punctuation"
|
||||
},
|
||||
{
|
||||
"text": ":",
|
||||
"kind": "punctuation"
|
||||
@ -4589,6 +4617,10 @@
|
||||
"text": "(",
|
||||
"kind": "punctuation"
|
||||
},
|
||||
{
|
||||
"text": "...",
|
||||
"kind": "punctuation"
|
||||
},
|
||||
{
|
||||
"text": "items",
|
||||
"kind": "parameterName"
|
||||
|
||||
@ -3,7 +3,7 @@
|
||||
////var y: Array<string>|Array<number>;
|
||||
////y.map/**/(
|
||||
|
||||
const text = "(method) Array<T>.map<unknown>(callbackfn: ((value: string, index: number, array: string[]) => unknown) & ((value: number, index: number, array: number[]) => unknown), thisArg: any): unknown[]";
|
||||
const text = "(method) Array<T>.map<unknown>(callbackfn: ((value: string, index: number, array: string[]) => unknown) & ((value: number, index: number, array: number[]) => unknown), thisArg?: any): unknown[]";
|
||||
const documentation = "Calls a defined callback function on each element of an array, and returns an array that contains the results.";
|
||||
|
||||
verify.quickInfoAt("", text, documentation);
|
||||
|
||||
@ -0,0 +1,18 @@
|
||||
/// <reference path='fourslash.ts'/>
|
||||
|
||||
// https://github.com/microsoft/TypeScript/issues/55574
|
||||
|
||||
//// declare const optionals:
|
||||
//// | ((a?: { a: true }) => unknown)
|
||||
//// | ((b?: { b: true }) => unknown);
|
||||
////
|
||||
//// /**/optionals();
|
||||
|
||||
verify.quickInfoAt(
|
||||
"",
|
||||
`const optionals: (arg0?: {
|
||||
a: true;
|
||||
} & {
|
||||
b: true;
|
||||
}) => unknown`,
|
||||
);
|
||||
@ -0,0 +1,18 @@
|
||||
/// <reference path='fourslash.ts'/>
|
||||
|
||||
// based on https://github.com/microsoft/TypeScript/issues/55574
|
||||
|
||||
//// declare const rest:
|
||||
//// | ((v: { a: true }, ...rest: string[]) => unknown)
|
||||
//// | ((v: { b: true }) => unknown);
|
||||
////
|
||||
//// /**/rest({ a: true, b: true }, "foo", "bar");
|
||||
|
||||
verify.quickInfoAt(
|
||||
"",
|
||||
`const rest: (v: {
|
||||
a: true;
|
||||
} & {
|
||||
b: true;
|
||||
}, ...rest: string[]) => unknown`,
|
||||
);
|
||||
@ -0,0 +1,18 @@
|
||||
/// <reference path='fourslash.ts'/>
|
||||
|
||||
// https://github.com/microsoft/TypeScript/issues/55574
|
||||
|
||||
//// declare const rest:
|
||||
//// | ((a?: { a: true }, ...rest: string[]) => unknown)
|
||||
//// | ((b?: { b: true }) => unknown);
|
||||
////
|
||||
//// /**/rest({ a: true, b: true }, "foo", "bar");
|
||||
|
||||
verify.quickInfoAt(
|
||||
"",
|
||||
`const rest: (arg0?: {
|
||||
a: true;
|
||||
} & {
|
||||
b: true;
|
||||
}, ...rest: string[]) => unknown`,
|
||||
);
|
||||
@ -0,0 +1,22 @@
|
||||
/// <reference path='fourslash.ts'/>
|
||||
|
||||
//// declare const fn:
|
||||
//// | ((a: { x: number }, b: { x: number }) => number)
|
||||
//// | ((...a: { y: number }[]) => number);
|
||||
////
|
||||
//// /**/fn();
|
||||
|
||||
verify.quickInfoAt(
|
||||
"",
|
||||
`const fn: (a: {
|
||||
x: number;
|
||||
} & {
|
||||
y: number;
|
||||
}, b: {
|
||||
x: number;
|
||||
} & {
|
||||
y: number;
|
||||
}, ...args: {
|
||||
y: number;
|
||||
}[]) => number`,
|
||||
);
|
||||
@ -0,0 +1,22 @@
|
||||
/// <reference path='fourslash.ts'/>
|
||||
|
||||
//// declare const fn:
|
||||
//// | ((a?: { x: number }, b?: { x: number }) => number)
|
||||
//// | ((...a: { y: number }[]) => number);
|
||||
////
|
||||
//// /**/fn();
|
||||
|
||||
verify.quickInfoAt(
|
||||
"",
|
||||
`const fn: (a?: {
|
||||
x: number;
|
||||
} & {
|
||||
y: number;
|
||||
}, b?: {
|
||||
x: number;
|
||||
} & {
|
||||
y: number;
|
||||
}, ...args: {
|
||||
y: number;
|
||||
}[]) => number`,
|
||||
);
|
||||
Loading…
x
Reference in New Issue
Block a user