mirror of
https://github.com/microsoft/TypeScript.git
synced 2025-11-18 17:21:48 +00:00
Merge pull request #24897 from Microsoft/restTuples
Tuples in rest parameters and spread expressions
This commit is contained in:
@@ -3606,6 +3606,8 @@ namespace ts {
|
||||
case SyntaxKind.TypeLiteral:
|
||||
case SyntaxKind.ArrayType:
|
||||
case SyntaxKind.TupleType:
|
||||
case SyntaxKind.OptionalType:
|
||||
case SyntaxKind.RestType:
|
||||
case SyntaxKind.UnionType:
|
||||
case SyntaxKind.IntersectionType:
|
||||
case SyntaxKind.ConditionalType:
|
||||
|
||||
+566
-250
File diff suppressed because it is too large
Load Diff
@@ -367,10 +367,6 @@
|
||||
"category": "Error",
|
||||
"code": 1121
|
||||
},
|
||||
"A tuple type element list cannot be empty.": {
|
||||
"category": "Error",
|
||||
"code": 1122
|
||||
},
|
||||
"Variable declaration list cannot be empty.": {
|
||||
"category": "Error",
|
||||
"code": 1123
|
||||
@@ -847,6 +843,14 @@
|
||||
"category": "Error",
|
||||
"code": 1255
|
||||
},
|
||||
"A rest element must be last in a tuple type.": {
|
||||
"category": "Error",
|
||||
"code": 1256
|
||||
},
|
||||
"A required element cannot follow an optional element.": {
|
||||
"category": "Error",
|
||||
"code": 1257
|
||||
},
|
||||
"'with' statements are not allowed in an async function block.": {
|
||||
"category": "Error",
|
||||
"code": 1300
|
||||
@@ -2032,6 +2036,18 @@
|
||||
"category": "Error",
|
||||
"code": 2571
|
||||
},
|
||||
"Rest signatures are incompatible.": {
|
||||
"category": "Error",
|
||||
"code": 2572
|
||||
},
|
||||
"Property '{0}' is incompatible with rest element type.": {
|
||||
"category": "Error",
|
||||
"code": 2573
|
||||
},
|
||||
"A rest element type must be an array type.": {
|
||||
"category": "Error",
|
||||
"code": 2574
|
||||
},
|
||||
"JSX element attributes type '{0}' may not be a union type.": {
|
||||
"category": "Error",
|
||||
"code": 2600
|
||||
|
||||
+10
-2
@@ -659,6 +659,8 @@ namespace ts {
|
||||
return emitArrayType(<ArrayTypeNode>node);
|
||||
case SyntaxKind.TupleType:
|
||||
return emitTupleType(<TupleTypeNode>node);
|
||||
case SyntaxKind.OptionalType:
|
||||
return emitOptionalType(<OptionalTypeNode>node);
|
||||
case SyntaxKind.UnionType:
|
||||
return emitUnionType(<UnionTypeNode>node);
|
||||
case SyntaxKind.IntersectionType:
|
||||
@@ -695,8 +697,9 @@ namespace ts {
|
||||
return emitJSDocNonNullableType(node as JSDocNonNullableType);
|
||||
case SyntaxKind.JSDocOptionalType:
|
||||
return emitJSDocOptionalType(node as JSDocOptionalType);
|
||||
case SyntaxKind.RestType:
|
||||
case SyntaxKind.JSDocVariadicType:
|
||||
return emitJSDocVariadicType(node as JSDocVariadicType);
|
||||
return emitRestOrJSDocVariadicType(node as RestTypeNode | JSDocVariadicType);
|
||||
|
||||
// Binding patterns
|
||||
case SyntaxKind.ObjectBindingPattern:
|
||||
@@ -1304,7 +1307,7 @@ namespace ts {
|
||||
writePunctuation("]");
|
||||
}
|
||||
|
||||
function emitJSDocVariadicType(node: JSDocVariadicType) {
|
||||
function emitRestOrJSDocVariadicType(node: RestTypeNode | JSDocVariadicType) {
|
||||
write("...");
|
||||
emit(node.type);
|
||||
}
|
||||
@@ -1315,6 +1318,11 @@ namespace ts {
|
||||
writePunctuation("]");
|
||||
}
|
||||
|
||||
function emitOptionalType(node: OptionalTypeNode) {
|
||||
emit(node.type);
|
||||
write("?");
|
||||
}
|
||||
|
||||
function emitUnionType(node: UnionTypeNode) {
|
||||
emitList(node, node.types, ListFormat.UnionTypeConstituents);
|
||||
}
|
||||
|
||||
+25
-1
@@ -745,12 +745,36 @@ namespace ts {
|
||||
return node;
|
||||
}
|
||||
|
||||
export function updateTypleTypeNode(node: TupleTypeNode, elementTypes: ReadonlyArray<TypeNode>) {
|
||||
export function updateTupleTypeNode(node: TupleTypeNode, elementTypes: ReadonlyArray<TypeNode>) {
|
||||
return node.elementTypes !== elementTypes
|
||||
? updateNode(createTupleTypeNode(elementTypes), node)
|
||||
: node;
|
||||
}
|
||||
|
||||
export function createOptionalTypeNode(type: TypeNode) {
|
||||
const node = createSynthesizedNode(SyntaxKind.OptionalType) as OptionalTypeNode;
|
||||
node.type = parenthesizeArrayTypeMember(type);
|
||||
return node;
|
||||
}
|
||||
|
||||
export function updateOptionalTypeNode(node: OptionalTypeNode, type: TypeNode): OptionalTypeNode {
|
||||
return node.type !== type
|
||||
? updateNode(createOptionalTypeNode(type), node)
|
||||
: node;
|
||||
}
|
||||
|
||||
export function createRestTypeNode(type: TypeNode) {
|
||||
const node = createSynthesizedNode(SyntaxKind.RestType) as RestTypeNode;
|
||||
node.type = type;
|
||||
return node;
|
||||
}
|
||||
|
||||
export function updateRestTypeNode(node: RestTypeNode, type: TypeNode): RestTypeNode {
|
||||
return node.type !== type
|
||||
? updateNode(createRestTypeNode(type), node)
|
||||
: node;
|
||||
}
|
||||
|
||||
export function createUnionTypeNode(types: ReadonlyArray<TypeNode>): UnionTypeNode {
|
||||
return <UnionTypeNode>createUnionOrIntersectionTypeNode(SyntaxKind.UnionType, types);
|
||||
}
|
||||
|
||||
+25
-13
@@ -445,19 +445,17 @@ namespace ts {
|
||||
case SyntaxKind.JsxClosingElement:
|
||||
return visitNode(cbNode, (<JsxClosingElement>node).tagName);
|
||||
|
||||
case SyntaxKind.OptionalType:
|
||||
case SyntaxKind.RestType:
|
||||
case SyntaxKind.JSDocTypeExpression:
|
||||
return visitNode(cbNode, (<JSDocTypeExpression>node).type);
|
||||
case SyntaxKind.JSDocNonNullableType:
|
||||
return visitNode(cbNode, (<JSDocNonNullableType>node).type);
|
||||
case SyntaxKind.JSDocNullableType:
|
||||
return visitNode(cbNode, (<JSDocNullableType>node).type);
|
||||
case SyntaxKind.JSDocOptionalType:
|
||||
return visitNode(cbNode, (<JSDocOptionalType>node).type);
|
||||
case SyntaxKind.JSDocVariadicType:
|
||||
return visitNode(cbNode, (<OptionalTypeNode | RestTypeNode | JSDocTypeExpression | JSDocTypeReferencingNode>node).type);
|
||||
case SyntaxKind.JSDocFunctionType:
|
||||
return visitNodes(cbNode, cbNodes, (<JSDocFunctionType>node).parameters) ||
|
||||
visitNode(cbNode, (<JSDocFunctionType>node).type);
|
||||
case SyntaxKind.JSDocVariadicType:
|
||||
return visitNode(cbNode, (<JSDocVariadicType>node).type);
|
||||
case SyntaxKind.JSDocComment:
|
||||
return visitNodes(cbNode, cbNodes, (<JSDoc>node).tags);
|
||||
case SyntaxKind.JSDocParameterTag:
|
||||
@@ -2289,7 +2287,7 @@ namespace ts {
|
||||
function parseJSDocAllType(postFixEquals: boolean): JSDocAllType | JSDocOptionalType {
|
||||
const result = createNode(SyntaxKind.JSDocAllType) as JSDocAllType;
|
||||
if (postFixEquals) {
|
||||
return createJSDocPostfixType(SyntaxKind.JSDocOptionalType, result) as JSDocOptionalType;
|
||||
return createPostfixType(SyntaxKind.JSDocOptionalType, result) as JSDocOptionalType;
|
||||
}
|
||||
else {
|
||||
nextToken();
|
||||
@@ -2367,7 +2365,7 @@ namespace ts {
|
||||
type = finishNode(variadic);
|
||||
}
|
||||
if (token() === SyntaxKind.EqualsToken) {
|
||||
return createJSDocPostfixType(SyntaxKind.JSDocOptionalType, type);
|
||||
return createPostfixType(SyntaxKind.JSDocOptionalType, type);
|
||||
}
|
||||
return type;
|
||||
}
|
||||
@@ -2775,9 +2773,23 @@ namespace ts {
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
function parseTupleElementType() {
|
||||
const pos = getNodePos();
|
||||
if (parseOptional(SyntaxKind.DotDotDotToken)) {
|
||||
const node = <RestTypeNode>createNode(SyntaxKind.RestType, pos);
|
||||
node.type = parseType();
|
||||
return finishNode(node);
|
||||
}
|
||||
const type = parseType();
|
||||
if (!(contextFlags & NodeFlags.JSDoc) && type.kind === SyntaxKind.JSDocNullableType && type.pos === (<JSDocNullableType>type).type.pos) {
|
||||
type.kind = SyntaxKind.OptionalType;
|
||||
}
|
||||
return type;
|
||||
}
|
||||
|
||||
function parseTupleType(): TupleTypeNode {
|
||||
const node = <TupleTypeNode>createNode(SyntaxKind.TupleType);
|
||||
node.elementTypes = parseBracketedList(ParsingContext.TupleElementTypes, parseType, SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken);
|
||||
node.elementTypes = parseBracketedList(ParsingContext.TupleElementTypes, parseTupleElementType, SyntaxKind.OpenBracketToken, SyntaxKind.CloseBracketToken);
|
||||
return finishNode(node);
|
||||
}
|
||||
|
||||
@@ -2960,14 +2972,14 @@ namespace ts {
|
||||
while (!scanner.hasPrecedingLineBreak()) {
|
||||
switch (token()) {
|
||||
case SyntaxKind.ExclamationToken:
|
||||
type = createJSDocPostfixType(SyntaxKind.JSDocNonNullableType, type);
|
||||
type = createPostfixType(SyntaxKind.JSDocNonNullableType, type);
|
||||
break;
|
||||
case SyntaxKind.QuestionToken:
|
||||
// If not in JSDoc and next token is start of a type we have a conditional type
|
||||
if (!(contextFlags & NodeFlags.JSDoc) && lookAhead(nextTokenIsStartOfType)) {
|
||||
return type;
|
||||
}
|
||||
type = createJSDocPostfixType(SyntaxKind.JSDocNullableType, type);
|
||||
type = createPostfixType(SyntaxKind.JSDocNullableType, type);
|
||||
break;
|
||||
case SyntaxKind.OpenBracketToken:
|
||||
parseExpected(SyntaxKind.OpenBracketToken);
|
||||
@@ -2992,9 +3004,9 @@ namespace ts {
|
||||
return type;
|
||||
}
|
||||
|
||||
function createJSDocPostfixType(kind: SyntaxKind, type: TypeNode) {
|
||||
function createPostfixType(kind: SyntaxKind, type: TypeNode) {
|
||||
nextToken();
|
||||
const postfix = createNode(kind, type.pos) as JSDocOptionalType | JSDocNonNullableType | JSDocNullableType;
|
||||
const postfix = createNode(kind, type.pos) as OptionalTypeNode | JSDocOptionalType | JSDocNonNullableType | JSDocNullableType;
|
||||
postfix.type = type;
|
||||
return finishNode(postfix);
|
||||
}
|
||||
|
||||
@@ -380,6 +380,8 @@ namespace ts {
|
||||
|
||||
case SyntaxKind.ArrayType:
|
||||
case SyntaxKind.TupleType:
|
||||
case SyntaxKind.OptionalType:
|
||||
case SyntaxKind.RestType:
|
||||
case SyntaxKind.TypeLiteral:
|
||||
case SyntaxKind.TypePredicate:
|
||||
case SyntaxKind.TypeParameter:
|
||||
|
||||
+32
-2
@@ -225,6 +225,8 @@ namespace ts {
|
||||
TypeLiteral,
|
||||
ArrayType,
|
||||
TupleType,
|
||||
OptionalType,
|
||||
RestType,
|
||||
UnionType,
|
||||
IntersectionType,
|
||||
ConditionalType,
|
||||
@@ -269,6 +271,7 @@ namespace ts {
|
||||
AsExpression,
|
||||
NonNullExpression,
|
||||
MetaProperty,
|
||||
SyntheticExpression,
|
||||
|
||||
// Misc
|
||||
TemplateSpan,
|
||||
@@ -1101,6 +1104,16 @@ namespace ts {
|
||||
elementTypes: NodeArray<TypeNode>;
|
||||
}
|
||||
|
||||
export interface OptionalTypeNode extends TypeNode {
|
||||
kind: SyntaxKind.OptionalType;
|
||||
type: TypeNode;
|
||||
}
|
||||
|
||||
export interface RestTypeNode extends TypeNode {
|
||||
kind: SyntaxKind.RestType;
|
||||
type: TypeNode;
|
||||
}
|
||||
|
||||
export type UnionOrIntersectionTypeNode = UnionTypeNode | IntersectionTypeNode;
|
||||
|
||||
export interface UnionTypeNode extends TypeNode {
|
||||
@@ -1288,6 +1301,12 @@ namespace ts {
|
||||
expression?: Expression;
|
||||
}
|
||||
|
||||
export interface SyntheticExpression extends Expression {
|
||||
kind: SyntaxKind.SyntheticExpression;
|
||||
isSpread: boolean;
|
||||
type: Type;
|
||||
}
|
||||
|
||||
// see: https://tc39.github.io/ecma262/#prod-ExponentiationExpression
|
||||
export type ExponentiationOperator
|
||||
= SyntaxKind.AsteriskAsteriskToken
|
||||
@@ -3521,14 +3540,15 @@ namespace ts {
|
||||
ContainsPrivate = 1 << 8, // Synthetic property with private constituent(s)
|
||||
ContainsStatic = 1 << 9, // Synthetic property with static constituent(s)
|
||||
Late = 1 << 10, // Late-bound symbol for a computed property with a dynamic name
|
||||
ReverseMapped = 1 << 11, // property of reverse-inferred homomorphic mapped type.
|
||||
ReverseMapped = 1 << 11, // Property of reverse-inferred homomorphic mapped type
|
||||
OptionalParameter = 1 << 12, // Optional parameter
|
||||
RestParameter = 1 << 13, // Rest parameter
|
||||
Synthetic = SyntheticProperty | SyntheticMethod
|
||||
}
|
||||
|
||||
/* @internal */
|
||||
export interface TransientSymbol extends Symbol, SymbolLinks {
|
||||
checkFlags: CheckFlags;
|
||||
isRestParameter?: boolean;
|
||||
}
|
||||
|
||||
/* @internal */
|
||||
@@ -3857,6 +3877,16 @@ namespace ts {
|
||||
variances?: Variance[]; // Variance of each type parameter
|
||||
}
|
||||
|
||||
export interface TupleType extends GenericType {
|
||||
minLength: number;
|
||||
hasRestElement: boolean;
|
||||
associatedNames?: __String[];
|
||||
}
|
||||
|
||||
export interface TupleTypeReference extends TypeReference {
|
||||
target: TupleType;
|
||||
}
|
||||
|
||||
export interface UnionOrIntersectionType extends Type {
|
||||
types: Type[]; // Constituent types
|
||||
/* @internal */
|
||||
|
||||
@@ -372,9 +372,17 @@ namespace ts {
|
||||
visitNode((<ArrayTypeNode>node).elementType, visitor, isTypeNode));
|
||||
|
||||
case SyntaxKind.TupleType:
|
||||
return updateTypleTypeNode((<TupleTypeNode>node),
|
||||
return updateTupleTypeNode((<TupleTypeNode>node),
|
||||
nodesVisitor((<TupleTypeNode>node).elementTypes, visitor, isTypeNode));
|
||||
|
||||
case SyntaxKind.OptionalType:
|
||||
return updateOptionalTypeNode((<OptionalTypeNode>node),
|
||||
visitNode((<OptionalTypeNode>node).type, visitor, isTypeNode));
|
||||
|
||||
case SyntaxKind.RestType:
|
||||
return updateRestTypeNode((<RestTypeNode>node),
|
||||
visitNode((<RestTypeNode>node).type, visitor, isTypeNode));
|
||||
|
||||
case SyntaxKind.UnionType:
|
||||
return updateUnionTypeNode(<UnionTypeNode>node,
|
||||
nodesVisitor((<UnionTypeNode>node).types, visitor, isTypeNode));
|
||||
|
||||
@@ -1,7 +0,0 @@
|
||||
tests/cases/conformance/parser/ecmascript5/TupleTypes/TupleType3.ts(1,8): error TS1122: A tuple type element list cannot be empty.
|
||||
|
||||
|
||||
==== tests/cases/conformance/parser/ecmascript5/TupleTypes/TupleType3.ts (1 errors) ====
|
||||
var v: []
|
||||
~~
|
||||
!!! error TS1122: A tuple type element list cannot be empty.
|
||||
@@ -1,11 +1,8 @@
|
||||
tests/cases/compiler/anyIndexedAccessArrayNoException.ts(1,12): error TS1122: A tuple type element list cannot be empty.
|
||||
tests/cases/compiler/anyIndexedAccessArrayNoException.ts(1,12): error TS2538: Type '[]' cannot be used as an index type.
|
||||
|
||||
|
||||
==== tests/cases/compiler/anyIndexedAccessArrayNoException.ts (2 errors) ====
|
||||
==== tests/cases/compiler/anyIndexedAccessArrayNoException.ts (1 errors) ====
|
||||
var x: any[[]];
|
||||
~~
|
||||
!!! error TS1122: A tuple type element list cannot be empty.
|
||||
~~
|
||||
!!! error TS2538: Type '[]' cannot be used as an index type.
|
||||
|
||||
+179
-146
@@ -746,144 +746,147 @@ declare namespace ts {
|
||||
TypeLiteral = 166,
|
||||
ArrayType = 167,
|
||||
TupleType = 168,
|
||||
UnionType = 169,
|
||||
IntersectionType = 170,
|
||||
ConditionalType = 171,
|
||||
InferType = 172,
|
||||
ParenthesizedType = 173,
|
||||
ThisType = 174,
|
||||
TypeOperator = 175,
|
||||
IndexedAccessType = 176,
|
||||
MappedType = 177,
|
||||
LiteralType = 178,
|
||||
ImportType = 179,
|
||||
ObjectBindingPattern = 180,
|
||||
ArrayBindingPattern = 181,
|
||||
BindingElement = 182,
|
||||
ArrayLiteralExpression = 183,
|
||||
ObjectLiteralExpression = 184,
|
||||
PropertyAccessExpression = 185,
|
||||
ElementAccessExpression = 186,
|
||||
CallExpression = 187,
|
||||
NewExpression = 188,
|
||||
TaggedTemplateExpression = 189,
|
||||
TypeAssertionExpression = 190,
|
||||
ParenthesizedExpression = 191,
|
||||
FunctionExpression = 192,
|
||||
ArrowFunction = 193,
|
||||
DeleteExpression = 194,
|
||||
TypeOfExpression = 195,
|
||||
VoidExpression = 196,
|
||||
AwaitExpression = 197,
|
||||
PrefixUnaryExpression = 198,
|
||||
PostfixUnaryExpression = 199,
|
||||
BinaryExpression = 200,
|
||||
ConditionalExpression = 201,
|
||||
TemplateExpression = 202,
|
||||
YieldExpression = 203,
|
||||
SpreadElement = 204,
|
||||
ClassExpression = 205,
|
||||
OmittedExpression = 206,
|
||||
ExpressionWithTypeArguments = 207,
|
||||
AsExpression = 208,
|
||||
NonNullExpression = 209,
|
||||
MetaProperty = 210,
|
||||
TemplateSpan = 211,
|
||||
SemicolonClassElement = 212,
|
||||
Block = 213,
|
||||
VariableStatement = 214,
|
||||
EmptyStatement = 215,
|
||||
ExpressionStatement = 216,
|
||||
IfStatement = 217,
|
||||
DoStatement = 218,
|
||||
WhileStatement = 219,
|
||||
ForStatement = 220,
|
||||
ForInStatement = 221,
|
||||
ForOfStatement = 222,
|
||||
ContinueStatement = 223,
|
||||
BreakStatement = 224,
|
||||
ReturnStatement = 225,
|
||||
WithStatement = 226,
|
||||
SwitchStatement = 227,
|
||||
LabeledStatement = 228,
|
||||
ThrowStatement = 229,
|
||||
TryStatement = 230,
|
||||
DebuggerStatement = 231,
|
||||
VariableDeclaration = 232,
|
||||
VariableDeclarationList = 233,
|
||||
FunctionDeclaration = 234,
|
||||
ClassDeclaration = 235,
|
||||
InterfaceDeclaration = 236,
|
||||
TypeAliasDeclaration = 237,
|
||||
EnumDeclaration = 238,
|
||||
ModuleDeclaration = 239,
|
||||
ModuleBlock = 240,
|
||||
CaseBlock = 241,
|
||||
NamespaceExportDeclaration = 242,
|
||||
ImportEqualsDeclaration = 243,
|
||||
ImportDeclaration = 244,
|
||||
ImportClause = 245,
|
||||
NamespaceImport = 246,
|
||||
NamedImports = 247,
|
||||
ImportSpecifier = 248,
|
||||
ExportAssignment = 249,
|
||||
ExportDeclaration = 250,
|
||||
NamedExports = 251,
|
||||
ExportSpecifier = 252,
|
||||
MissingDeclaration = 253,
|
||||
ExternalModuleReference = 254,
|
||||
JsxElement = 255,
|
||||
JsxSelfClosingElement = 256,
|
||||
JsxOpeningElement = 257,
|
||||
JsxClosingElement = 258,
|
||||
JsxFragment = 259,
|
||||
JsxOpeningFragment = 260,
|
||||
JsxClosingFragment = 261,
|
||||
JsxAttribute = 262,
|
||||
JsxAttributes = 263,
|
||||
JsxSpreadAttribute = 264,
|
||||
JsxExpression = 265,
|
||||
CaseClause = 266,
|
||||
DefaultClause = 267,
|
||||
HeritageClause = 268,
|
||||
CatchClause = 269,
|
||||
PropertyAssignment = 270,
|
||||
ShorthandPropertyAssignment = 271,
|
||||
SpreadAssignment = 272,
|
||||
EnumMember = 273,
|
||||
SourceFile = 274,
|
||||
Bundle = 275,
|
||||
UnparsedSource = 276,
|
||||
InputFiles = 277,
|
||||
JSDocTypeExpression = 278,
|
||||
JSDocAllType = 279,
|
||||
JSDocUnknownType = 280,
|
||||
JSDocNullableType = 281,
|
||||
JSDocNonNullableType = 282,
|
||||
JSDocOptionalType = 283,
|
||||
JSDocFunctionType = 284,
|
||||
JSDocVariadicType = 285,
|
||||
JSDocComment = 286,
|
||||
JSDocTypeLiteral = 287,
|
||||
JSDocSignature = 288,
|
||||
JSDocTag = 289,
|
||||
JSDocAugmentsTag = 290,
|
||||
JSDocClassTag = 291,
|
||||
JSDocCallbackTag = 292,
|
||||
JSDocParameterTag = 293,
|
||||
JSDocReturnTag = 294,
|
||||
JSDocThisTag = 295,
|
||||
JSDocTypeTag = 296,
|
||||
JSDocTemplateTag = 297,
|
||||
JSDocTypedefTag = 298,
|
||||
JSDocPropertyTag = 299,
|
||||
SyntaxList = 300,
|
||||
NotEmittedStatement = 301,
|
||||
PartiallyEmittedExpression = 302,
|
||||
CommaListExpression = 303,
|
||||
MergeDeclarationMarker = 304,
|
||||
EndOfDeclarationMarker = 305,
|
||||
Count = 306,
|
||||
OptionalType = 169,
|
||||
RestType = 170,
|
||||
UnionType = 171,
|
||||
IntersectionType = 172,
|
||||
ConditionalType = 173,
|
||||
InferType = 174,
|
||||
ParenthesizedType = 175,
|
||||
ThisType = 176,
|
||||
TypeOperator = 177,
|
||||
IndexedAccessType = 178,
|
||||
MappedType = 179,
|
||||
LiteralType = 180,
|
||||
ImportType = 181,
|
||||
ObjectBindingPattern = 182,
|
||||
ArrayBindingPattern = 183,
|
||||
BindingElement = 184,
|
||||
ArrayLiteralExpression = 185,
|
||||
ObjectLiteralExpression = 186,
|
||||
PropertyAccessExpression = 187,
|
||||
ElementAccessExpression = 188,
|
||||
CallExpression = 189,
|
||||
NewExpression = 190,
|
||||
TaggedTemplateExpression = 191,
|
||||
TypeAssertionExpression = 192,
|
||||
ParenthesizedExpression = 193,
|
||||
FunctionExpression = 194,
|
||||
ArrowFunction = 195,
|
||||
DeleteExpression = 196,
|
||||
TypeOfExpression = 197,
|
||||
VoidExpression = 198,
|
||||
AwaitExpression = 199,
|
||||
PrefixUnaryExpression = 200,
|
||||
PostfixUnaryExpression = 201,
|
||||
BinaryExpression = 202,
|
||||
ConditionalExpression = 203,
|
||||
TemplateExpression = 204,
|
||||
YieldExpression = 205,
|
||||
SpreadElement = 206,
|
||||
ClassExpression = 207,
|
||||
OmittedExpression = 208,
|
||||
ExpressionWithTypeArguments = 209,
|
||||
AsExpression = 210,
|
||||
NonNullExpression = 211,
|
||||
MetaProperty = 212,
|
||||
SyntheticExpression = 213,
|
||||
TemplateSpan = 214,
|
||||
SemicolonClassElement = 215,
|
||||
Block = 216,
|
||||
VariableStatement = 217,
|
||||
EmptyStatement = 218,
|
||||
ExpressionStatement = 219,
|
||||
IfStatement = 220,
|
||||
DoStatement = 221,
|
||||
WhileStatement = 222,
|
||||
ForStatement = 223,
|
||||
ForInStatement = 224,
|
||||
ForOfStatement = 225,
|
||||
ContinueStatement = 226,
|
||||
BreakStatement = 227,
|
||||
ReturnStatement = 228,
|
||||
WithStatement = 229,
|
||||
SwitchStatement = 230,
|
||||
LabeledStatement = 231,
|
||||
ThrowStatement = 232,
|
||||
TryStatement = 233,
|
||||
DebuggerStatement = 234,
|
||||
VariableDeclaration = 235,
|
||||
VariableDeclarationList = 236,
|
||||
FunctionDeclaration = 237,
|
||||
ClassDeclaration = 238,
|
||||
InterfaceDeclaration = 239,
|
||||
TypeAliasDeclaration = 240,
|
||||
EnumDeclaration = 241,
|
||||
ModuleDeclaration = 242,
|
||||
ModuleBlock = 243,
|
||||
CaseBlock = 244,
|
||||
NamespaceExportDeclaration = 245,
|
||||
ImportEqualsDeclaration = 246,
|
||||
ImportDeclaration = 247,
|
||||
ImportClause = 248,
|
||||
NamespaceImport = 249,
|
||||
NamedImports = 250,
|
||||
ImportSpecifier = 251,
|
||||
ExportAssignment = 252,
|
||||
ExportDeclaration = 253,
|
||||
NamedExports = 254,
|
||||
ExportSpecifier = 255,
|
||||
MissingDeclaration = 256,
|
||||
ExternalModuleReference = 257,
|
||||
JsxElement = 258,
|
||||
JsxSelfClosingElement = 259,
|
||||
JsxOpeningElement = 260,
|
||||
JsxClosingElement = 261,
|
||||
JsxFragment = 262,
|
||||
JsxOpeningFragment = 263,
|
||||
JsxClosingFragment = 264,
|
||||
JsxAttribute = 265,
|
||||
JsxAttributes = 266,
|
||||
JsxSpreadAttribute = 267,
|
||||
JsxExpression = 268,
|
||||
CaseClause = 269,
|
||||
DefaultClause = 270,
|
||||
HeritageClause = 271,
|
||||
CatchClause = 272,
|
||||
PropertyAssignment = 273,
|
||||
ShorthandPropertyAssignment = 274,
|
||||
SpreadAssignment = 275,
|
||||
EnumMember = 276,
|
||||
SourceFile = 277,
|
||||
Bundle = 278,
|
||||
UnparsedSource = 279,
|
||||
InputFiles = 280,
|
||||
JSDocTypeExpression = 281,
|
||||
JSDocAllType = 282,
|
||||
JSDocUnknownType = 283,
|
||||
JSDocNullableType = 284,
|
||||
JSDocNonNullableType = 285,
|
||||
JSDocOptionalType = 286,
|
||||
JSDocFunctionType = 287,
|
||||
JSDocVariadicType = 288,
|
||||
JSDocComment = 289,
|
||||
JSDocTypeLiteral = 290,
|
||||
JSDocSignature = 291,
|
||||
JSDocTag = 292,
|
||||
JSDocAugmentsTag = 293,
|
||||
JSDocClassTag = 294,
|
||||
JSDocCallbackTag = 295,
|
||||
JSDocParameterTag = 296,
|
||||
JSDocReturnTag = 297,
|
||||
JSDocThisTag = 298,
|
||||
JSDocTypeTag = 299,
|
||||
JSDocTemplateTag = 300,
|
||||
JSDocTypedefTag = 301,
|
||||
JSDocPropertyTag = 302,
|
||||
SyntaxList = 303,
|
||||
NotEmittedStatement = 304,
|
||||
PartiallyEmittedExpression = 305,
|
||||
CommaListExpression = 306,
|
||||
MergeDeclarationMarker = 307,
|
||||
EndOfDeclarationMarker = 308,
|
||||
Count = 309,
|
||||
FirstAssignment = 58,
|
||||
LastAssignment = 70,
|
||||
FirstCompoundAssignment = 59,
|
||||
@@ -895,7 +898,7 @@ declare namespace ts {
|
||||
FirstFutureReservedWord = 108,
|
||||
LastFutureReservedWord = 116,
|
||||
FirstTypeNode = 161,
|
||||
LastTypeNode = 179,
|
||||
LastTypeNode = 181,
|
||||
FirstPunctuation = 17,
|
||||
LastPunctuation = 70,
|
||||
FirstToken = 0,
|
||||
@@ -909,10 +912,10 @@ declare namespace ts {
|
||||
FirstBinaryOperator = 27,
|
||||
LastBinaryOperator = 70,
|
||||
FirstNode = 146,
|
||||
FirstJSDocNode = 278,
|
||||
LastJSDocNode = 299,
|
||||
FirstJSDocTagNode = 289,
|
||||
LastJSDocTagNode = 299,
|
||||
FirstJSDocNode = 281,
|
||||
LastJSDocNode = 302,
|
||||
FirstJSDocTagNode = 292,
|
||||
LastJSDocTagNode = 302,
|
||||
FirstContextualKeyword = 117,
|
||||
LastContextualKeyword = 145
|
||||
}
|
||||
@@ -1335,6 +1338,14 @@ declare namespace ts {
|
||||
kind: SyntaxKind.TupleType;
|
||||
elementTypes: NodeArray<TypeNode>;
|
||||
}
|
||||
interface OptionalTypeNode extends TypeNode {
|
||||
kind: SyntaxKind.OptionalType;
|
||||
type: TypeNode;
|
||||
}
|
||||
interface RestTypeNode extends TypeNode {
|
||||
kind: SyntaxKind.RestType;
|
||||
type: TypeNode;
|
||||
}
|
||||
type UnionOrIntersectionTypeNode = UnionTypeNode | IntersectionTypeNode;
|
||||
interface UnionTypeNode extends TypeNode {
|
||||
kind: SyntaxKind.UnionType;
|
||||
@@ -1465,6 +1476,11 @@ declare namespace ts {
|
||||
asteriskToken?: AsteriskToken;
|
||||
expression?: Expression;
|
||||
}
|
||||
interface SyntheticExpression extends Expression {
|
||||
kind: SyntaxKind.SyntheticExpression;
|
||||
isSpread: boolean;
|
||||
type: Type;
|
||||
}
|
||||
type ExponentiationOperator = SyntaxKind.AsteriskAsteriskToken;
|
||||
type MultiplicativeOperator = SyntaxKind.AsteriskToken | SyntaxKind.SlashToken | SyntaxKind.PercentToken;
|
||||
type MultiplicativeOperatorOrHigher = ExponentiationOperator | MultiplicativeOperator;
|
||||
@@ -3074,11 +3090,12 @@ declare namespace ts {
|
||||
ContainsStatic = 512,
|
||||
Late = 1024,
|
||||
ReverseMapped = 2048,
|
||||
OptionalParameter = 4096,
|
||||
RestParameter = 8192,
|
||||
Synthetic = 6
|
||||
}
|
||||
interface TransientSymbol extends Symbol, SymbolLinks {
|
||||
checkFlags: CheckFlags;
|
||||
isRestParameter?: boolean;
|
||||
}
|
||||
interface ReverseMappedSymbol extends TransientSymbol {
|
||||
propertyType: Type;
|
||||
@@ -3338,6 +3355,14 @@ declare namespace ts {
|
||||
instantiations: Map<TypeReference>;
|
||||
variances?: Variance[];
|
||||
}
|
||||
interface TupleType extends GenericType {
|
||||
minLength: number;
|
||||
hasRestElement: boolean;
|
||||
associatedNames?: __String[];
|
||||
}
|
||||
interface TupleTypeReference extends TypeReference {
|
||||
target: TupleType;
|
||||
}
|
||||
interface UnionOrIntersectionType extends Type {
|
||||
types: Type[];
|
||||
propertyCache: SymbolTable;
|
||||
@@ -4905,7 +4930,6 @@ declare namespace ts {
|
||||
An_object_literal_cannot_have_property_and_accessor_with_the_same_name: DiagnosticMessage;
|
||||
An_export_assignment_cannot_have_modifiers: DiagnosticMessage;
|
||||
Octal_literals_are_not_allowed_in_strict_mode: DiagnosticMessage;
|
||||
A_tuple_type_element_list_cannot_be_empty: DiagnosticMessage;
|
||||
Variable_declaration_list_cannot_be_empty: DiagnosticMessage;
|
||||
Digit_expected: DiagnosticMessage;
|
||||
Hexadecimal_digit_expected: DiagnosticMessage;
|
||||
@@ -5025,6 +5049,8 @@ declare namespace ts {
|
||||
_0_tag_cannot_be_used_independently_as_a_top_level_JSDoc_tag: DiagnosticMessage;
|
||||
A_const_initializer_in_an_ambient_context_must_be_a_string_or_numeric_literal: DiagnosticMessage;
|
||||
A_definite_assignment_assertion_is_not_permitted_in_this_context: DiagnosticMessage;
|
||||
A_rest_element_must_be_last_in_a_tuple_type: DiagnosticMessage;
|
||||
A_required_element_cannot_follow_an_optional_element: DiagnosticMessage;
|
||||
with_statements_are_not_allowed_in_an_async_function_block: DiagnosticMessage;
|
||||
await_expression_is_only_allowed_within_an_async_function: DiagnosticMessage;
|
||||
can_only_be_used_in_an_object_literal_property_inside_a_destructuring_assignment: DiagnosticMessage;
|
||||
@@ -5321,6 +5347,9 @@ declare namespace ts {
|
||||
Type_0_is_not_an_array_type_or_a_string_type_Use_compiler_option_downlevelIteration_to_allow_iterating_of_iterators: DiagnosticMessage;
|
||||
Property_0_does_not_exist_on_type_1_Did_you_forget_to_use_await: DiagnosticMessage;
|
||||
Object_is_of_type_unknown: DiagnosticMessage;
|
||||
Rest_signatures_are_incompatible: DiagnosticMessage;
|
||||
Property_0_is_incompatible_with_rest_element_type: DiagnosticMessage;
|
||||
A_rest_element_type_must_be_an_array_type: DiagnosticMessage;
|
||||
JSX_element_attributes_type_0_may_not_be_a_union_type: DiagnosticMessage;
|
||||
The_return_type_of_a_JSX_element_constructor_must_return_an_object_type: DiagnosticMessage;
|
||||
JSX_element_implicitly_has_type_any_because_the_global_type_JSX_Element_does_not_exist: DiagnosticMessage;
|
||||
@@ -7779,7 +7808,11 @@ declare namespace ts {
|
||||
function createArrayTypeNode(elementType: TypeNode): ArrayTypeNode;
|
||||
function updateArrayTypeNode(node: ArrayTypeNode, elementType: TypeNode): ArrayTypeNode;
|
||||
function createTupleTypeNode(elementTypes: ReadonlyArray<TypeNode>): TupleTypeNode;
|
||||
function updateTypleTypeNode(node: TupleTypeNode, elementTypes: ReadonlyArray<TypeNode>): TupleTypeNode;
|
||||
function updateTupleTypeNode(node: TupleTypeNode, elementTypes: ReadonlyArray<TypeNode>): TupleTypeNode;
|
||||
function createOptionalTypeNode(type: TypeNode): OptionalTypeNode;
|
||||
function updateOptionalTypeNode(node: OptionalTypeNode, type: TypeNode): OptionalTypeNode;
|
||||
function createRestTypeNode(type: TypeNode): RestTypeNode;
|
||||
function updateRestTypeNode(node: RestTypeNode, type: TypeNode): RestTypeNode;
|
||||
function createUnionTypeNode(types: ReadonlyArray<TypeNode>): UnionTypeNode;
|
||||
function updateUnionTypeNode(node: UnionTypeNode, types: NodeArray<TypeNode>): UnionTypeNode;
|
||||
function createIntersectionTypeNode(types: ReadonlyArray<TypeNode>): IntersectionTypeNode;
|
||||
|
||||
+172
-144
@@ -226,144 +226,147 @@ declare namespace ts {
|
||||
TypeLiteral = 166,
|
||||
ArrayType = 167,
|
||||
TupleType = 168,
|
||||
UnionType = 169,
|
||||
IntersectionType = 170,
|
||||
ConditionalType = 171,
|
||||
InferType = 172,
|
||||
ParenthesizedType = 173,
|
||||
ThisType = 174,
|
||||
TypeOperator = 175,
|
||||
IndexedAccessType = 176,
|
||||
MappedType = 177,
|
||||
LiteralType = 178,
|
||||
ImportType = 179,
|
||||
ObjectBindingPattern = 180,
|
||||
ArrayBindingPattern = 181,
|
||||
BindingElement = 182,
|
||||
ArrayLiteralExpression = 183,
|
||||
ObjectLiteralExpression = 184,
|
||||
PropertyAccessExpression = 185,
|
||||
ElementAccessExpression = 186,
|
||||
CallExpression = 187,
|
||||
NewExpression = 188,
|
||||
TaggedTemplateExpression = 189,
|
||||
TypeAssertionExpression = 190,
|
||||
ParenthesizedExpression = 191,
|
||||
FunctionExpression = 192,
|
||||
ArrowFunction = 193,
|
||||
DeleteExpression = 194,
|
||||
TypeOfExpression = 195,
|
||||
VoidExpression = 196,
|
||||
AwaitExpression = 197,
|
||||
PrefixUnaryExpression = 198,
|
||||
PostfixUnaryExpression = 199,
|
||||
BinaryExpression = 200,
|
||||
ConditionalExpression = 201,
|
||||
TemplateExpression = 202,
|
||||
YieldExpression = 203,
|
||||
SpreadElement = 204,
|
||||
ClassExpression = 205,
|
||||
OmittedExpression = 206,
|
||||
ExpressionWithTypeArguments = 207,
|
||||
AsExpression = 208,
|
||||
NonNullExpression = 209,
|
||||
MetaProperty = 210,
|
||||
TemplateSpan = 211,
|
||||
SemicolonClassElement = 212,
|
||||
Block = 213,
|
||||
VariableStatement = 214,
|
||||
EmptyStatement = 215,
|
||||
ExpressionStatement = 216,
|
||||
IfStatement = 217,
|
||||
DoStatement = 218,
|
||||
WhileStatement = 219,
|
||||
ForStatement = 220,
|
||||
ForInStatement = 221,
|
||||
ForOfStatement = 222,
|
||||
ContinueStatement = 223,
|
||||
BreakStatement = 224,
|
||||
ReturnStatement = 225,
|
||||
WithStatement = 226,
|
||||
SwitchStatement = 227,
|
||||
LabeledStatement = 228,
|
||||
ThrowStatement = 229,
|
||||
TryStatement = 230,
|
||||
DebuggerStatement = 231,
|
||||
VariableDeclaration = 232,
|
||||
VariableDeclarationList = 233,
|
||||
FunctionDeclaration = 234,
|
||||
ClassDeclaration = 235,
|
||||
InterfaceDeclaration = 236,
|
||||
TypeAliasDeclaration = 237,
|
||||
EnumDeclaration = 238,
|
||||
ModuleDeclaration = 239,
|
||||
ModuleBlock = 240,
|
||||
CaseBlock = 241,
|
||||
NamespaceExportDeclaration = 242,
|
||||
ImportEqualsDeclaration = 243,
|
||||
ImportDeclaration = 244,
|
||||
ImportClause = 245,
|
||||
NamespaceImport = 246,
|
||||
NamedImports = 247,
|
||||
ImportSpecifier = 248,
|
||||
ExportAssignment = 249,
|
||||
ExportDeclaration = 250,
|
||||
NamedExports = 251,
|
||||
ExportSpecifier = 252,
|
||||
MissingDeclaration = 253,
|
||||
ExternalModuleReference = 254,
|
||||
JsxElement = 255,
|
||||
JsxSelfClosingElement = 256,
|
||||
JsxOpeningElement = 257,
|
||||
JsxClosingElement = 258,
|
||||
JsxFragment = 259,
|
||||
JsxOpeningFragment = 260,
|
||||
JsxClosingFragment = 261,
|
||||
JsxAttribute = 262,
|
||||
JsxAttributes = 263,
|
||||
JsxSpreadAttribute = 264,
|
||||
JsxExpression = 265,
|
||||
CaseClause = 266,
|
||||
DefaultClause = 267,
|
||||
HeritageClause = 268,
|
||||
CatchClause = 269,
|
||||
PropertyAssignment = 270,
|
||||
ShorthandPropertyAssignment = 271,
|
||||
SpreadAssignment = 272,
|
||||
EnumMember = 273,
|
||||
SourceFile = 274,
|
||||
Bundle = 275,
|
||||
UnparsedSource = 276,
|
||||
InputFiles = 277,
|
||||
JSDocTypeExpression = 278,
|
||||
JSDocAllType = 279,
|
||||
JSDocUnknownType = 280,
|
||||
JSDocNullableType = 281,
|
||||
JSDocNonNullableType = 282,
|
||||
JSDocOptionalType = 283,
|
||||
JSDocFunctionType = 284,
|
||||
JSDocVariadicType = 285,
|
||||
JSDocComment = 286,
|
||||
JSDocTypeLiteral = 287,
|
||||
JSDocSignature = 288,
|
||||
JSDocTag = 289,
|
||||
JSDocAugmentsTag = 290,
|
||||
JSDocClassTag = 291,
|
||||
JSDocCallbackTag = 292,
|
||||
JSDocParameterTag = 293,
|
||||
JSDocReturnTag = 294,
|
||||
JSDocThisTag = 295,
|
||||
JSDocTypeTag = 296,
|
||||
JSDocTemplateTag = 297,
|
||||
JSDocTypedefTag = 298,
|
||||
JSDocPropertyTag = 299,
|
||||
SyntaxList = 300,
|
||||
NotEmittedStatement = 301,
|
||||
PartiallyEmittedExpression = 302,
|
||||
CommaListExpression = 303,
|
||||
MergeDeclarationMarker = 304,
|
||||
EndOfDeclarationMarker = 305,
|
||||
Count = 306,
|
||||
OptionalType = 169,
|
||||
RestType = 170,
|
||||
UnionType = 171,
|
||||
IntersectionType = 172,
|
||||
ConditionalType = 173,
|
||||
InferType = 174,
|
||||
ParenthesizedType = 175,
|
||||
ThisType = 176,
|
||||
TypeOperator = 177,
|
||||
IndexedAccessType = 178,
|
||||
MappedType = 179,
|
||||
LiteralType = 180,
|
||||
ImportType = 181,
|
||||
ObjectBindingPattern = 182,
|
||||
ArrayBindingPattern = 183,
|
||||
BindingElement = 184,
|
||||
ArrayLiteralExpression = 185,
|
||||
ObjectLiteralExpression = 186,
|
||||
PropertyAccessExpression = 187,
|
||||
ElementAccessExpression = 188,
|
||||
CallExpression = 189,
|
||||
NewExpression = 190,
|
||||
TaggedTemplateExpression = 191,
|
||||
TypeAssertionExpression = 192,
|
||||
ParenthesizedExpression = 193,
|
||||
FunctionExpression = 194,
|
||||
ArrowFunction = 195,
|
||||
DeleteExpression = 196,
|
||||
TypeOfExpression = 197,
|
||||
VoidExpression = 198,
|
||||
AwaitExpression = 199,
|
||||
PrefixUnaryExpression = 200,
|
||||
PostfixUnaryExpression = 201,
|
||||
BinaryExpression = 202,
|
||||
ConditionalExpression = 203,
|
||||
TemplateExpression = 204,
|
||||
YieldExpression = 205,
|
||||
SpreadElement = 206,
|
||||
ClassExpression = 207,
|
||||
OmittedExpression = 208,
|
||||
ExpressionWithTypeArguments = 209,
|
||||
AsExpression = 210,
|
||||
NonNullExpression = 211,
|
||||
MetaProperty = 212,
|
||||
SyntheticExpression = 213,
|
||||
TemplateSpan = 214,
|
||||
SemicolonClassElement = 215,
|
||||
Block = 216,
|
||||
VariableStatement = 217,
|
||||
EmptyStatement = 218,
|
||||
ExpressionStatement = 219,
|
||||
IfStatement = 220,
|
||||
DoStatement = 221,
|
||||
WhileStatement = 222,
|
||||
ForStatement = 223,
|
||||
ForInStatement = 224,
|
||||
ForOfStatement = 225,
|
||||
ContinueStatement = 226,
|
||||
BreakStatement = 227,
|
||||
ReturnStatement = 228,
|
||||
WithStatement = 229,
|
||||
SwitchStatement = 230,
|
||||
LabeledStatement = 231,
|
||||
ThrowStatement = 232,
|
||||
TryStatement = 233,
|
||||
DebuggerStatement = 234,
|
||||
VariableDeclaration = 235,
|
||||
VariableDeclarationList = 236,
|
||||
FunctionDeclaration = 237,
|
||||
ClassDeclaration = 238,
|
||||
InterfaceDeclaration = 239,
|
||||
TypeAliasDeclaration = 240,
|
||||
EnumDeclaration = 241,
|
||||
ModuleDeclaration = 242,
|
||||
ModuleBlock = 243,
|
||||
CaseBlock = 244,
|
||||
NamespaceExportDeclaration = 245,
|
||||
ImportEqualsDeclaration = 246,
|
||||
ImportDeclaration = 247,
|
||||
ImportClause = 248,
|
||||
NamespaceImport = 249,
|
||||
NamedImports = 250,
|
||||
ImportSpecifier = 251,
|
||||
ExportAssignment = 252,
|
||||
ExportDeclaration = 253,
|
||||
NamedExports = 254,
|
||||
ExportSpecifier = 255,
|
||||
MissingDeclaration = 256,
|
||||
ExternalModuleReference = 257,
|
||||
JsxElement = 258,
|
||||
JsxSelfClosingElement = 259,
|
||||
JsxOpeningElement = 260,
|
||||
JsxClosingElement = 261,
|
||||
JsxFragment = 262,
|
||||
JsxOpeningFragment = 263,
|
||||
JsxClosingFragment = 264,
|
||||
JsxAttribute = 265,
|
||||
JsxAttributes = 266,
|
||||
JsxSpreadAttribute = 267,
|
||||
JsxExpression = 268,
|
||||
CaseClause = 269,
|
||||
DefaultClause = 270,
|
||||
HeritageClause = 271,
|
||||
CatchClause = 272,
|
||||
PropertyAssignment = 273,
|
||||
ShorthandPropertyAssignment = 274,
|
||||
SpreadAssignment = 275,
|
||||
EnumMember = 276,
|
||||
SourceFile = 277,
|
||||
Bundle = 278,
|
||||
UnparsedSource = 279,
|
||||
InputFiles = 280,
|
||||
JSDocTypeExpression = 281,
|
||||
JSDocAllType = 282,
|
||||
JSDocUnknownType = 283,
|
||||
JSDocNullableType = 284,
|
||||
JSDocNonNullableType = 285,
|
||||
JSDocOptionalType = 286,
|
||||
JSDocFunctionType = 287,
|
||||
JSDocVariadicType = 288,
|
||||
JSDocComment = 289,
|
||||
JSDocTypeLiteral = 290,
|
||||
JSDocSignature = 291,
|
||||
JSDocTag = 292,
|
||||
JSDocAugmentsTag = 293,
|
||||
JSDocClassTag = 294,
|
||||
JSDocCallbackTag = 295,
|
||||
JSDocParameterTag = 296,
|
||||
JSDocReturnTag = 297,
|
||||
JSDocThisTag = 298,
|
||||
JSDocTypeTag = 299,
|
||||
JSDocTemplateTag = 300,
|
||||
JSDocTypedefTag = 301,
|
||||
JSDocPropertyTag = 302,
|
||||
SyntaxList = 303,
|
||||
NotEmittedStatement = 304,
|
||||
PartiallyEmittedExpression = 305,
|
||||
CommaListExpression = 306,
|
||||
MergeDeclarationMarker = 307,
|
||||
EndOfDeclarationMarker = 308,
|
||||
Count = 309,
|
||||
FirstAssignment = 58,
|
||||
LastAssignment = 70,
|
||||
FirstCompoundAssignment = 59,
|
||||
@@ -375,7 +378,7 @@ declare namespace ts {
|
||||
FirstFutureReservedWord = 108,
|
||||
LastFutureReservedWord = 116,
|
||||
FirstTypeNode = 161,
|
||||
LastTypeNode = 179,
|
||||
LastTypeNode = 181,
|
||||
FirstPunctuation = 17,
|
||||
LastPunctuation = 70,
|
||||
FirstToken = 0,
|
||||
@@ -389,10 +392,10 @@ declare namespace ts {
|
||||
FirstBinaryOperator = 27,
|
||||
LastBinaryOperator = 70,
|
||||
FirstNode = 146,
|
||||
FirstJSDocNode = 278,
|
||||
LastJSDocNode = 299,
|
||||
FirstJSDocTagNode = 289,
|
||||
LastJSDocTagNode = 299
|
||||
FirstJSDocNode = 281,
|
||||
LastJSDocNode = 302,
|
||||
FirstJSDocTagNode = 292,
|
||||
LastJSDocTagNode = 302
|
||||
}
|
||||
enum NodeFlags {
|
||||
None = 0,
|
||||
@@ -751,6 +754,14 @@ declare namespace ts {
|
||||
kind: SyntaxKind.TupleType;
|
||||
elementTypes: NodeArray<TypeNode>;
|
||||
}
|
||||
interface OptionalTypeNode extends TypeNode {
|
||||
kind: SyntaxKind.OptionalType;
|
||||
type: TypeNode;
|
||||
}
|
||||
interface RestTypeNode extends TypeNode {
|
||||
kind: SyntaxKind.RestType;
|
||||
type: TypeNode;
|
||||
}
|
||||
type UnionOrIntersectionTypeNode = UnionTypeNode | IntersectionTypeNode;
|
||||
interface UnionTypeNode extends TypeNode {
|
||||
kind: SyntaxKind.UnionType;
|
||||
@@ -875,6 +886,11 @@ declare namespace ts {
|
||||
asteriskToken?: AsteriskToken;
|
||||
expression?: Expression;
|
||||
}
|
||||
interface SyntheticExpression extends Expression {
|
||||
kind: SyntaxKind.SyntheticExpression;
|
||||
isSpread: boolean;
|
||||
type: Type;
|
||||
}
|
||||
type ExponentiationOperator = SyntaxKind.AsteriskAsteriskToken;
|
||||
type MultiplicativeOperator = SyntaxKind.AsteriskToken | SyntaxKind.SlashToken | SyntaxKind.PercentToken;
|
||||
type MultiplicativeOperatorOrHigher = ExponentiationOperator | MultiplicativeOperator;
|
||||
@@ -2267,6 +2283,14 @@ declare namespace ts {
|
||||
}
|
||||
interface GenericType extends InterfaceType, TypeReference {
|
||||
}
|
||||
interface TupleType extends GenericType {
|
||||
minLength: number;
|
||||
hasRestElement: boolean;
|
||||
associatedNames?: __String[];
|
||||
}
|
||||
interface TupleTypeReference extends TypeReference {
|
||||
target: TupleType;
|
||||
}
|
||||
interface UnionOrIntersectionType extends Type {
|
||||
types: Type[];
|
||||
}
|
||||
@@ -3694,7 +3718,11 @@ declare namespace ts {
|
||||
function createArrayTypeNode(elementType: TypeNode): ArrayTypeNode;
|
||||
function updateArrayTypeNode(node: ArrayTypeNode, elementType: TypeNode): ArrayTypeNode;
|
||||
function createTupleTypeNode(elementTypes: ReadonlyArray<TypeNode>): TupleTypeNode;
|
||||
function updateTypleTypeNode(node: TupleTypeNode, elementTypes: ReadonlyArray<TypeNode>): TupleTypeNode;
|
||||
function updateTupleTypeNode(node: TupleTypeNode, elementTypes: ReadonlyArray<TypeNode>): TupleTypeNode;
|
||||
function createOptionalTypeNode(type: TypeNode): OptionalTypeNode;
|
||||
function updateOptionalTypeNode(node: OptionalTypeNode, type: TypeNode): OptionalTypeNode;
|
||||
function createRestTypeNode(type: TypeNode): RestTypeNode;
|
||||
function updateRestTypeNode(node: RestTypeNode, type: TypeNode): RestTypeNode;
|
||||
function createUnionTypeNode(types: ReadonlyArray<TypeNode>): UnionTypeNode;
|
||||
function updateUnionTypeNode(node: UnionTypeNode, types: NodeArray<TypeNode>): UnionTypeNode;
|
||||
function createIntersectionTypeNode(types: ReadonlyArray<TypeNode>): IntersectionTypeNode;
|
||||
|
||||
@@ -1,6 +1,8 @@
|
||||
tests/cases/conformance/expressions/contextualTyping/argumentExpressionContextualTyping.ts(16,5): error TS2345: Argument of type '(string | number | boolean)[]' is not assignable to parameter of type '[string, number, boolean]'.
|
||||
Property '0' is missing in type '(string | number | boolean)[]'.
|
||||
tests/cases/conformance/expressions/contextualTyping/argumentExpressionContextualTyping.ts(17,5): error TS2345: Argument of type '(string | number | boolean)[]' is not assignable to parameter of type '[string, number, boolean]'.
|
||||
tests/cases/conformance/expressions/contextualTyping/argumentExpressionContextualTyping.ts(17,5): error TS2345: Argument of type '[string, number, true, ...(string | number | boolean)[]]' is not assignable to parameter of type '[string, number, boolean]'.
|
||||
Types of property 'length' are incompatible.
|
||||
Type 'number' is not assignable to type '3'.
|
||||
tests/cases/conformance/expressions/contextualTyping/argumentExpressionContextualTyping.ts(18,5): error TS2345: Argument of type '{ x: (string | number)[]; y: { c: boolean; d: string; e: number; }; }' is not assignable to parameter of type '{ x: [any, any]; y: { c: any; d: any; e: any; }; }'.
|
||||
Types of property 'x' are incompatible.
|
||||
Type '(string | number)[]' is not assignable to type '[any, any]'.
|
||||
@@ -29,7 +31,9 @@ tests/cases/conformance/expressions/contextualTyping/argumentExpressionContextua
|
||||
!!! error TS2345: Property '0' is missing in type '(string | number | boolean)[]'.
|
||||
baz(["string", 1, true, ...array]); // Error
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2345: Argument of type '(string | number | boolean)[]' is not assignable to parameter of type '[string, number, boolean]'.
|
||||
!!! error TS2345: Argument of type '[string, number, true, ...(string | number | boolean)[]]' is not assignable to parameter of type '[string, number, boolean]'.
|
||||
!!! error TS2345: Types of property 'length' are incompatible.
|
||||
!!! error TS2345: Type 'number' is not assignable to type '3'.
|
||||
foo(o); // Error because x has an array type namely (string|number)[]
|
||||
~
|
||||
!!! error TS2345: Argument of type '{ x: (string | number)[]; y: { c: boolean; d: string; e: number; }; }' is not assignable to parameter of type '{ x: [any, any]; y: { c: any; d: any; e: any; }; }'.
|
||||
|
||||
@@ -11,7 +11,7 @@ function foo({x: [a, b], y: {c, d, e}}) { }
|
||||
>e : any
|
||||
|
||||
function bar({x: [a, b = 10], y: {c, d, e = { f:1 }}}) { }
|
||||
>bar : ({ x: [a, b], y: { c, d, e } }: { x: [any, number]; y: { c: any; d: any; e?: { f: number; }; }; }) => void
|
||||
>bar : ({ x: [a, b], y: { c, d, e } }: { x: [any, number?]; y: { c: any; d: any; e?: { f: number; }; }; }) => void
|
||||
>x : any
|
||||
>a : any
|
||||
>b : number
|
||||
|
||||
@@ -7,8 +7,9 @@ tests/cases/conformance/expressions/contextualTyping/arrayLiteralExpressionConte
|
||||
tests/cases/conformance/expressions/contextualTyping/arrayLiteralExpressionContextualTyping.ts(8,5): error TS2322: Type '[number, number, number, string]' is not assignable to type '[number, number, number]'.
|
||||
Types of property 'length' are incompatible.
|
||||
Type '4' is not assignable to type '3'.
|
||||
tests/cases/conformance/expressions/contextualTyping/arrayLiteralExpressionContextualTyping.ts(14,5): error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'.
|
||||
Property '0' is missing in type 'number[]'.
|
||||
tests/cases/conformance/expressions/contextualTyping/arrayLiteralExpressionContextualTyping.ts(14,5): error TS2322: Type '[number, number, number, ...number[]]' is not assignable to type '[number, number, number]'.
|
||||
Types of property 'length' are incompatible.
|
||||
Type 'number' is not assignable to type '3'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/expressions/contextualTyping/arrayLiteralExpressionContextualTyping.ts (4 errors) ====
|
||||
@@ -39,6 +40,7 @@ tests/cases/conformance/expressions/contextualTyping/arrayLiteralExpressionConte
|
||||
var spr1 = [1, 2, 3, ...tup];
|
||||
var spr2:[number, number, number] = [1, 2, 3, ...tup]; // Error
|
||||
~~~~
|
||||
!!! error TS2322: Type 'number[]' is not assignable to type '[number, number, number]'.
|
||||
!!! error TS2322: Property '0' is missing in type 'number[]'.
|
||||
!!! error TS2322: Type '[number, number, number, ...number[]]' is not assignable to type '[number, number, number]'.
|
||||
!!! error TS2322: Types of property 'length' are incompatible.
|
||||
!!! error TS2322: Type 'number' is not assignable to type '3'.
|
||||
|
||||
@@ -62,7 +62,7 @@ var spr1 = [1, 2, 3, ...tup];
|
||||
|
||||
var spr2:[number, number, number] = [1, 2, 3, ...tup]; // Error
|
||||
>spr2 : [number, number, number]
|
||||
>[1, 2, 3, ...tup] : number[]
|
||||
>[1, 2, 3, ...tup] : [number, number, number, ...number[]]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(10,5): error TS2322: Type 'undefined[]' is not assignable to type '[any, any, any]'.
|
||||
Property '0' is missing in type 'undefined[]'.
|
||||
tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(10,5): error TS2322: Type '[]' is not assignable to type '[any, any, any]'.
|
||||
Property '0' is missing in type '[]'.
|
||||
tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(11,5): error TS2322: Type '[string, number, boolean]' is not assignable to type '[boolean, string, number]'.
|
||||
Type 'string' is not assignable to type 'boolean'.
|
||||
tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(17,5): error TS2322: Type '[number, number, string, boolean]' is not assignable to type '[number, number]'.
|
||||
@@ -30,8 +30,8 @@ tests/cases/conformance/expressions/arrayLiterals/arrayLiterals3.ts(34,5): error
|
||||
|
||||
var a0: [any, any, any] = []; // Error
|
||||
~~
|
||||
!!! error TS2322: Type 'undefined[]' is not assignable to type '[any, any, any]'.
|
||||
!!! error TS2322: Property '0' is missing in type 'undefined[]'.
|
||||
!!! error TS2322: Type '[]' is not assignable to type '[any, any, any]'.
|
||||
!!! error TS2322: Property '0' is missing in type '[]'.
|
||||
var a1: [boolean, string, number] = ["string", 1, true]; // Error
|
||||
~~
|
||||
!!! error TS2322: Type '[string, number, boolean]' is not assignable to type '[boolean, string, number]'.
|
||||
|
||||
@@ -10,7 +10,7 @@
|
||||
|
||||
var a0: [any, any, any] = []; // Error
|
||||
>a0 : [any, any, any]
|
||||
>[] : undefined[]
|
||||
>[] : []
|
||||
|
||||
var a1: [boolean, string, number] = ["string", 1, true]; // Error
|
||||
>a1 : [boolean, string, number]
|
||||
|
||||
@@ -71,14 +71,14 @@ var p3 = ([, a]) => { };
|
||||
>a : any
|
||||
|
||||
var p4 = ([, ...a]) => { };
|
||||
>p4 : ([, ...a]: any[]) => void
|
||||
>([, ...a]) => { } : ([, ...a]: any[]) => void
|
||||
>p4 : ([, ...a]: [any?, ...any[]]) => void
|
||||
>([, ...a]) => { } : ([, ...a]: [any?, ...any[]]) => void
|
||||
> : undefined
|
||||
>a : any[]
|
||||
|
||||
var p5 = ([a = 1]) => { };
|
||||
>p5 : ([a]: [number]) => void
|
||||
>([a = 1]) => { } : ([a]: [number]) => void
|
||||
>p5 : ([a]: [number?]) => void
|
||||
>([a = 1]) => { } : ([a]: [number?]) => void
|
||||
>a : number
|
||||
>1 : 1
|
||||
|
||||
|
||||
@@ -2,19 +2,16 @@ tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(22,1): erro
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(23,1): error TS2556: Expected 0 arguments, but got 1 or more.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(26,5): error TS2345: Argument of type 'string | number' is not assignable to parameter of type 'number'.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(27,5): error TS2345: Argument of type 'string | number' is not assignable to parameter of type 'number'.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(27,5): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(28,13): error TS2345: Argument of type 'string | number' is not assignable to parameter of type 'number'.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(29,13): error TS2345: Argument of type 'string | number' is not assignable to parameter of type 'number'.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(29,13): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(30,11): error TS2345: Argument of type 'string | number' is not assignable to parameter of type 'number'.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(31,11): error TS2345: Argument of type 'string | number' is not assignable to parameter of type 'number'.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(31,11): error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(32,1): error TS2556: Expected 1-3 arguments, but got 0 or more.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(33,1): error TS2556: Expected 1-3 arguments, but got 0 or more.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(34,1): error TS2556: Expected 1-3 arguments, but got 0 or more.
|
||||
tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(34,8): error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts (11 errors) ====
|
||||
@@ -53,24 +50,21 @@ tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(34,1): erro
|
||||
!!! error TS2345: Type 'string' is not assignable to type 'number'.
|
||||
all(...tuple)
|
||||
~~~~~~~~
|
||||
!!! error TS2345: Argument of type 'string | number' is not assignable to parameter of type 'number'.
|
||||
!!! error TS2345: Type 'string' is not assignable to type 'number'.
|
||||
!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
|
||||
prefix("b", ...mixed)
|
||||
~~~~~~~~
|
||||
!!! error TS2345: Argument of type 'string | number' is not assignable to parameter of type 'number'.
|
||||
!!! error TS2345: Type 'string' is not assignable to type 'number'.
|
||||
prefix("c", ...tuple)
|
||||
~~~~~~~~
|
||||
!!! error TS2345: Argument of type 'string | number' is not assignable to parameter of type 'number'.
|
||||
!!! error TS2345: Type 'string' is not assignable to type 'number'.
|
||||
!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
|
||||
rest("e", ...mixed)
|
||||
~~~~~~~~
|
||||
!!! error TS2345: Argument of type 'string | number' is not assignable to parameter of type 'number'.
|
||||
!!! error TS2345: Type 'string' is not assignable to type 'number'.
|
||||
rest("f", ...tuple)
|
||||
~~~~~~~~
|
||||
!!! error TS2345: Argument of type 'string | number' is not assignable to parameter of type 'number'.
|
||||
!!! error TS2345: Type 'string' is not assignable to type 'number'.
|
||||
!!! error TS2345: Argument of type 'string' is not assignable to parameter of type 'number'.
|
||||
prefix(...ns) // required parameters are required
|
||||
~~~~~~~~~~~~~
|
||||
!!! error TS2556: Expected 1-3 arguments, but got 0 or more.
|
||||
@@ -78,6 +72,6 @@ tests/cases/conformance/expressions/functionCalls/callWithSpread2.ts(34,1): erro
|
||||
~~~~~~~~~~~~~~~~
|
||||
!!! error TS2556: Expected 1-3 arguments, but got 0 or more.
|
||||
prefix(...tuple)
|
||||
~~~~~~~~~~~~~~~~
|
||||
!!! error TS2556: Expected 1-3 arguments, but got 0 or more.
|
||||
~~~~~~~~
|
||||
!!! error TS2345: Argument of type 'number' is not assignable to parameter of type 'string'.
|
||||
|
||||
@@ -14,5 +14,5 @@ function foo(_a) {
|
||||
|
||||
|
||||
//// [declarationEmitDestructuring3.d.ts]
|
||||
declare function bar([x, z, ...w]: any[]): void;
|
||||
declare function foo([x, ...y]?: (string | number | boolean)[]): void;
|
||||
declare function bar([x, z, ...w]: [any, any, ...any[]]): void;
|
||||
declare function foo([x, ...y]?: [number, string, boolean]): void;
|
||||
|
||||
@@ -1,15 +1,15 @@
|
||||
=== tests/cases/compiler/declarationEmitDestructuring3.ts ===
|
||||
function bar([x, z, ...w]) { }
|
||||
>bar : ([x, z, ...w]: any[]) => void
|
||||
>bar : ([x, z, ...w]: [any, any, ...any[]]) => void
|
||||
>x : any
|
||||
>z : any
|
||||
>w : any[]
|
||||
|
||||
function foo([x, ...y] = [1, "string", true]) { }
|
||||
>foo : ([x, ...y]?: (string | number | boolean)[]) => void
|
||||
>x : string | number | boolean
|
||||
>y : (string | number | boolean)[]
|
||||
>[1, "string", true] : (string | number | boolean)[]
|
||||
>foo : ([x, ...y]?: [number, string, boolean]) => void
|
||||
>x : number
|
||||
>y : (string | boolean)[]
|
||||
>[1, "string", true] : [number, string, boolean]
|
||||
>1 : 1
|
||||
>"string" : "string"
|
||||
>true : true
|
||||
|
||||
@@ -24,8 +24,8 @@ function bar2(_a) {
|
||||
|
||||
|
||||
//// [declarationEmitDestructuring5.d.ts]
|
||||
declare function baz([, z, ,]: [any, any, any]): void;
|
||||
declare function baz([, z, ,]: [any, any, any?]): void;
|
||||
declare function foo([, b,]: [any, any]): void;
|
||||
declare function bar([z, , ,]: [any, any, any]): void;
|
||||
declare function bar([z, , ,]: [any, any?, any?]): void;
|
||||
declare function bar1([z, , ,]?: [number, number, number, number, number]): void;
|
||||
declare function bar2([, , z, , ,]: [any, any, any, any, any]): void;
|
||||
declare function bar2([, , z, , ,]: [any, any, any, any?, any?]): void;
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
=== tests/cases/compiler/declarationEmitDestructuring5.ts ===
|
||||
function baz([, z, , ]) { }
|
||||
>baz : ([, z, ,]: [any, any, any]) => void
|
||||
>baz : ([, z, ,]: [any, any, any?]) => void
|
||||
> : undefined
|
||||
>z : any
|
||||
> : undefined
|
||||
@@ -11,7 +11,7 @@ function foo([, b, ]: [any, any]): void { }
|
||||
>b : any
|
||||
|
||||
function bar([z, , , ]) { }
|
||||
>bar : ([z, , ,]: [any, any, any]) => void
|
||||
>bar : ([z, , ,]: [any, any?, any?]) => void
|
||||
>z : any
|
||||
> : undefined
|
||||
> : undefined
|
||||
@@ -29,7 +29,7 @@ function bar1([z, , , ] = [1, 3, 4, 6, 7]) { }
|
||||
>7 : 7
|
||||
|
||||
function bar2([,,z, , , ]) { }
|
||||
>bar2 : ([, , z, , ,]: [any, any, any, any, any]) => void
|
||||
>bar2 : ([, , z, , ,]: [any, any, any, any?, any?]) => void
|
||||
> : undefined
|
||||
> : undefined
|
||||
>z : any
|
||||
|
||||
@@ -23,7 +23,7 @@ var [a11, b11, c11] = [];
|
||||
>a11 : any
|
||||
>b11 : any
|
||||
>c11 : any
|
||||
>[] : [undefined, undefined, undefined]
|
||||
>[] : [undefined?, undefined?, undefined?]
|
||||
|
||||
var [a2, [b2, { x12, y12: c2 }]=["abc", { x12: 10, y12: false }]] = [1, ["hello", { x12: 5, y12: true }]];
|
||||
>a2 : number
|
||||
|
||||
@@ -24,8 +24,8 @@ var _f = [1, "hello", true], x19 = _f[0], y19 = _f[1], z19 = _f[2], a13 = _f.sli
|
||||
declare var a5: number[];
|
||||
declare var x14: number, a6: number[];
|
||||
declare var x15: number, y15: number, a7: number[];
|
||||
declare var x16: number, y16: number, z16: number, a8: number[];
|
||||
declare var x16: number, y16: number, z16: number, a8: any[];
|
||||
declare var a9: (string | number | boolean)[];
|
||||
declare var x17: string | number | boolean, a10: (string | number | boolean)[];
|
||||
declare var x18: string | number | boolean, y18: string | number | boolean, a12: (string | number | boolean)[];
|
||||
declare var x19: string | number | boolean, y19: string | number | boolean, z19: string | number | boolean, a13: (string | number | boolean)[];
|
||||
declare var x17: number, a10: (string | boolean)[];
|
||||
declare var x18: number, y18: string, a12: boolean[];
|
||||
declare var x19: number, y19: string, z19: boolean, a13: any[];
|
||||
|
||||
@@ -9,7 +9,7 @@ var [...a5] = [1, 2, 3];
|
||||
var [x14, ...a6] = [1, 2, 3];
|
||||
>x14 : number
|
||||
>a6 : number[]
|
||||
>[1, 2, 3] : number[]
|
||||
>[1, 2, 3] : [number, number, number]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
@@ -18,7 +18,7 @@ var [x15, y15, ...a7] = [1, 2, 3];
|
||||
>x15 : number
|
||||
>y15 : number
|
||||
>a7 : number[]
|
||||
>[1, 2, 3] : number[]
|
||||
>[1, 2, 3] : [number, number, number]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
@@ -27,8 +27,8 @@ var [x16, y16, z16, ...a8] = [1, 2, 3];
|
||||
>x16 : number
|
||||
>y16 : number
|
||||
>z16 : number
|
||||
>a8 : number[]
|
||||
>[1, 2, 3] : number[]
|
||||
>a8 : any[]
|
||||
>[1, 2, 3] : [number, number, number]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
@@ -41,28 +41,28 @@ var [...a9] = [1, "hello", true];
|
||||
>true : true
|
||||
|
||||
var [x17, ...a10] = [1, "hello", true];
|
||||
>x17 : string | number | boolean
|
||||
>a10 : (string | number | boolean)[]
|
||||
>[1, "hello", true] : (string | number | boolean)[]
|
||||
>x17 : number
|
||||
>a10 : (string | boolean)[]
|
||||
>[1, "hello", true] : [number, string, boolean]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
var [x18, y18, ...a12] = [1, "hello", true];
|
||||
>x18 : string | number | boolean
|
||||
>y18 : string | number | boolean
|
||||
>a12 : (string | number | boolean)[]
|
||||
>[1, "hello", true] : (string | number | boolean)[]
|
||||
>x18 : number
|
||||
>y18 : string
|
||||
>a12 : boolean[]
|
||||
>[1, "hello", true] : [number, string, boolean]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
var [x19, y19, z19, ...a13] = [1, "hello", true];
|
||||
>x19 : string | number | boolean
|
||||
>y19 : string | number | boolean
|
||||
>z19 : string | number | boolean
|
||||
>a13 : (string | number | boolean)[]
|
||||
>[1, "hello", true] : (string | number | boolean)[]
|
||||
>x19 : number
|
||||
>y19 : string
|
||||
>z19 : boolean
|
||||
>a13 : any[]
|
||||
>[1, "hello", true] : [number, string, boolean]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
@@ -103,7 +103,7 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9):
|
||||
}
|
||||
|
||||
function f8() {
|
||||
var [a, b, c] = []; // Ok, [] is an array
|
||||
var [a, b, c] = []; // Error, [] is an empty tuple
|
||||
~
|
||||
!!! error TS2525: Initializer provides no value for this binding element and the binding element has no default value.
|
||||
~
|
||||
@@ -224,32 +224,36 @@ tests/cases/conformance/es6/destructuring/declarationsAndAssignments.ts(138,9):
|
||||
}
|
||||
|
||||
function f20() {
|
||||
var a: number[];
|
||||
var x: number;
|
||||
var y: number;
|
||||
var z: number;
|
||||
var a: number[];
|
||||
var a3: any[];
|
||||
var [...a] = [1, 2, 3];
|
||||
var [x, ...a] = [1, 2, 3];
|
||||
var [x, y, ...a] = [1, 2, 3];
|
||||
var [x, y, z, ...a] = [1, 2, 3];
|
||||
var [x, y, z, ...a3] = [1, 2, 3];
|
||||
[...a] = [1, 2, 3];
|
||||
[x, ...a] = [1, 2, 3];
|
||||
[x, y, ...a] = [1, 2, 3];
|
||||
[x, y, z, ...a] = [1, 2, 3];
|
||||
[x, y, z, ...a3] = [1, 2, 3];
|
||||
}
|
||||
|
||||
function f21() {
|
||||
var a: (number | string | boolean)[];
|
||||
var x: number | string | boolean;
|
||||
var y: number | string | boolean;
|
||||
var z: number | string | boolean;
|
||||
var [...a] = [1, "hello", true];
|
||||
var [x, ...a] = [1, "hello", true];
|
||||
var [x, y, ...a] = [1, "hello", true];
|
||||
var [x, y, z, ...a] = [1, "hello", true];
|
||||
[...a] = [1, "hello", true];
|
||||
[x, ...a] = [1, "hello", true];
|
||||
[x, y, ...a] = [1, "hello", true];
|
||||
[x, y, z, ...a] = [1, "hello", true];
|
||||
var x: number;
|
||||
var y: string;
|
||||
var z: boolean;
|
||||
var a0: (number | string | boolean)[];
|
||||
var a1: (string | boolean)[];
|
||||
var a2: boolean[];
|
||||
var a3: any[];
|
||||
var [...a0] = [1, "hello", true];
|
||||
var [x, ...a1] = [1, "hello", true];
|
||||
var [x, y, ...a2] = [1, "hello", true];
|
||||
var [x, y, z, ...a3] = [1, "hello", true];
|
||||
[...a0] = [1, "hello", true];
|
||||
[x, ...a1] = [1, "hello", true];
|
||||
[x, y, ...a2] = [1, "hello", true];
|
||||
[x, y, z, ...a3] = [1, "hello", true];
|
||||
}
|
||||
|
||||
@@ -60,7 +60,7 @@ function f7() {
|
||||
}
|
||||
|
||||
function f8() {
|
||||
var [a, b, c] = []; // Ok, [] is an array
|
||||
var [a, b, c] = []; // Error, [] is an empty tuple
|
||||
var [d, e, f] = [1]; // Error, [1] is a tuple
|
||||
}
|
||||
|
||||
@@ -150,33 +150,37 @@ function f19() {
|
||||
}
|
||||
|
||||
function f20() {
|
||||
var a: number[];
|
||||
var x: number;
|
||||
var y: number;
|
||||
var z: number;
|
||||
var a: number[];
|
||||
var a3: any[];
|
||||
var [...a] = [1, 2, 3];
|
||||
var [x, ...a] = [1, 2, 3];
|
||||
var [x, y, ...a] = [1, 2, 3];
|
||||
var [x, y, z, ...a] = [1, 2, 3];
|
||||
var [x, y, z, ...a3] = [1, 2, 3];
|
||||
[...a] = [1, 2, 3];
|
||||
[x, ...a] = [1, 2, 3];
|
||||
[x, y, ...a] = [1, 2, 3];
|
||||
[x, y, z, ...a] = [1, 2, 3];
|
||||
[x, y, z, ...a3] = [1, 2, 3];
|
||||
}
|
||||
|
||||
function f21() {
|
||||
var a: (number | string | boolean)[];
|
||||
var x: number | string | boolean;
|
||||
var y: number | string | boolean;
|
||||
var z: number | string | boolean;
|
||||
var [...a] = [1, "hello", true];
|
||||
var [x, ...a] = [1, "hello", true];
|
||||
var [x, y, ...a] = [1, "hello", true];
|
||||
var [x, y, z, ...a] = [1, "hello", true];
|
||||
[...a] = [1, "hello", true];
|
||||
[x, ...a] = [1, "hello", true];
|
||||
[x, y, ...a] = [1, "hello", true];
|
||||
[x, y, z, ...a] = [1, "hello", true];
|
||||
var x: number;
|
||||
var y: string;
|
||||
var z: boolean;
|
||||
var a0: (number | string | boolean)[];
|
||||
var a1: (string | boolean)[];
|
||||
var a2: boolean[];
|
||||
var a3: any[];
|
||||
var [...a0] = [1, "hello", true];
|
||||
var [x, ...a1] = [1, "hello", true];
|
||||
var [x, y, ...a2] = [1, "hello", true];
|
||||
var [x, y, z, ...a3] = [1, "hello", true];
|
||||
[...a0] = [1, "hello", true];
|
||||
[x, ...a1] = [1, "hello", true];
|
||||
[x, y, ...a2] = [1, "hello", true];
|
||||
[x, y, z, ...a3] = [1, "hello", true];
|
||||
}
|
||||
|
||||
|
||||
@@ -235,7 +239,7 @@ function f7() {
|
||||
var y;
|
||||
}
|
||||
function f8() {
|
||||
var _a = [], a = _a[0], b = _a[1], c = _a[2]; // Ok, [] is an array
|
||||
var _a = [], a = _a[0], b = _a[1], c = _a[2]; // Error, [] is an empty tuple
|
||||
var _b = [1], d = _b[0], e = _b[1], f = _b[2]; // Error, [1] is a tuple
|
||||
}
|
||||
function f9() {
|
||||
@@ -318,31 +322,35 @@ function f19() {
|
||||
}
|
||||
function f20() {
|
||||
var _a, _b, _c;
|
||||
var a;
|
||||
var x;
|
||||
var y;
|
||||
var z;
|
||||
var a;
|
||||
var a3;
|
||||
var a = [1, 2, 3].slice(0);
|
||||
var _d = [1, 2, 3], x = _d[0], a = _d.slice(1);
|
||||
var _e = [1, 2, 3], x = _e[0], y = _e[1], a = _e.slice(2);
|
||||
var _f = [1, 2, 3], x = _f[0], y = _f[1], z = _f[2], a = _f.slice(3);
|
||||
var _f = [1, 2, 3], x = _f[0], y = _f[1], z = _f[2], a3 = _f.slice(3);
|
||||
a = [1, 2, 3].slice(0);
|
||||
_a = [1, 2, 3], x = _a[0], a = _a.slice(1);
|
||||
_b = [1, 2, 3], x = _b[0], y = _b[1], a = _b.slice(2);
|
||||
_c = [1, 2, 3], x = _c[0], y = _c[1], z = _c[2], a = _c.slice(3);
|
||||
_c = [1, 2, 3], x = _c[0], y = _c[1], z = _c[2], a3 = _c.slice(3);
|
||||
}
|
||||
function f21() {
|
||||
var _a, _b, _c;
|
||||
var a;
|
||||
var x;
|
||||
var y;
|
||||
var z;
|
||||
var a = [1, "hello", true].slice(0);
|
||||
var _d = [1, "hello", true], x = _d[0], a = _d.slice(1);
|
||||
var _e = [1, "hello", true], x = _e[0], y = _e[1], a = _e.slice(2);
|
||||
var _f = [1, "hello", true], x = _f[0], y = _f[1], z = _f[2], a = _f.slice(3);
|
||||
a = [1, "hello", true].slice(0);
|
||||
_a = [1, "hello", true], x = _a[0], a = _a.slice(1);
|
||||
_b = [1, "hello", true], x = _b[0], y = _b[1], a = _b.slice(2);
|
||||
_c = [1, "hello", true], x = _c[0], y = _c[1], z = _c[2], a = _c.slice(3);
|
||||
var a0;
|
||||
var a1;
|
||||
var a2;
|
||||
var a3;
|
||||
var a0 = [1, "hello", true].slice(0);
|
||||
var _d = [1, "hello", true], x = _d[0], a1 = _d.slice(1);
|
||||
var _e = [1, "hello", true], x = _e[0], y = _e[1], a2 = _e.slice(2);
|
||||
var _f = [1, "hello", true], x = _f[0], y = _f[1], z = _f[2], a3 = _f.slice(3);
|
||||
a0 = [1, "hello", true].slice(0);
|
||||
_a = [1, "hello", true], x = _a[0], a1 = _a.slice(1);
|
||||
_b = [1, "hello", true], x = _b[0], y = _b[1], a2 = _b.slice(2);
|
||||
_c = [1, "hello", true], x = _c[0], y = _c[1], z = _c[2], a3 = _c.slice(3);
|
||||
}
|
||||
|
||||
@@ -189,7 +189,7 @@ function f7() {
|
||||
function f8() {
|
||||
>f8 : Symbol(f8, Decl(declarationsAndAssignments.ts, 58, 1))
|
||||
|
||||
var [a, b, c] = []; // Ok, [] is an array
|
||||
var [a, b, c] = []; // Error, [] is an empty tuple
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 61, 9))
|
||||
>b : Symbol(b, Decl(declarationsAndAssignments.ts, 61, 11))
|
||||
>c : Symbol(c, Decl(declarationsAndAssignments.ts, 61, 14))
|
||||
@@ -474,104 +474,116 @@ function f19() {
|
||||
function f20() {
|
||||
>f20 : Symbol(f20, Decl(declarationsAndAssignments.ts, 148, 1))
|
||||
|
||||
var a: number[];
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 155, 9), Decl(declarationsAndAssignments.ts, 156, 11), Decl(declarationsAndAssignments.ts, 157, 14), Decl(declarationsAndAssignments.ts, 158, 17))
|
||||
|
||||
var x: number;
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9))
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9))
|
||||
|
||||
var y: number;
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 11))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 158, 11), Decl(declarationsAndAssignments.ts, 159, 11))
|
||||
|
||||
var z: number;
|
||||
>z : Symbol(z, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 158, 14))
|
||||
>z : Symbol(z, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 159, 14))
|
||||
|
||||
var a: number[];
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14))
|
||||
|
||||
var a3: any[];
|
||||
>a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 155, 7), Decl(declarationsAndAssignments.ts, 159, 17))
|
||||
|
||||
var [...a] = [1, 2, 3];
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 155, 9), Decl(declarationsAndAssignments.ts, 156, 11), Decl(declarationsAndAssignments.ts, 157, 14), Decl(declarationsAndAssignments.ts, 158, 17))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14))
|
||||
|
||||
var [x, ...a] = [1, 2, 3];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 155, 9), Decl(declarationsAndAssignments.ts, 156, 11), Decl(declarationsAndAssignments.ts, 157, 14), Decl(declarationsAndAssignments.ts, 158, 17))
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14))
|
||||
|
||||
var [x, y, ...a] = [1, 2, 3];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 11))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 155, 9), Decl(declarationsAndAssignments.ts, 156, 11), Decl(declarationsAndAssignments.ts, 157, 14), Decl(declarationsAndAssignments.ts, 158, 17))
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 158, 11), Decl(declarationsAndAssignments.ts, 159, 11))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14))
|
||||
|
||||
var [x, y, z, ...a] = [1, 2, 3];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 11))
|
||||
>z : Symbol(z, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 158, 14))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 155, 9), Decl(declarationsAndAssignments.ts, 156, 11), Decl(declarationsAndAssignments.ts, 157, 14), Decl(declarationsAndAssignments.ts, 158, 17))
|
||||
var [x, y, z, ...a3] = [1, 2, 3];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 158, 11), Decl(declarationsAndAssignments.ts, 159, 11))
|
||||
>z : Symbol(z, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 159, 14))
|
||||
>a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 155, 7), Decl(declarationsAndAssignments.ts, 159, 17))
|
||||
|
||||
[...a] = [1, 2, 3];
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 155, 9), Decl(declarationsAndAssignments.ts, 156, 11), Decl(declarationsAndAssignments.ts, 157, 14), Decl(declarationsAndAssignments.ts, 158, 17))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14))
|
||||
|
||||
[x, ...a] = [1, 2, 3];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 155, 9), Decl(declarationsAndAssignments.ts, 156, 11), Decl(declarationsAndAssignments.ts, 157, 14), Decl(declarationsAndAssignments.ts, 158, 17))
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14))
|
||||
|
||||
[x, y, ...a] = [1, 2, 3];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 11))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 155, 9), Decl(declarationsAndAssignments.ts, 156, 11), Decl(declarationsAndAssignments.ts, 157, 14), Decl(declarationsAndAssignments.ts, 158, 17))
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 158, 11), Decl(declarationsAndAssignments.ts, 159, 11))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 14))
|
||||
|
||||
[x, y, z, ...a] = [1, 2, 3];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 156, 9), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 157, 11), Decl(declarationsAndAssignments.ts, 158, 11))
|
||||
>z : Symbol(z, Decl(declarationsAndAssignments.ts, 154, 7), Decl(declarationsAndAssignments.ts, 158, 14))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 155, 9), Decl(declarationsAndAssignments.ts, 156, 11), Decl(declarationsAndAssignments.ts, 157, 14), Decl(declarationsAndAssignments.ts, 158, 17))
|
||||
[x, y, z, ...a3] = [1, 2, 3];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 151, 7), Decl(declarationsAndAssignments.ts, 157, 9), Decl(declarationsAndAssignments.ts, 158, 9), Decl(declarationsAndAssignments.ts, 159, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 152, 7), Decl(declarationsAndAssignments.ts, 158, 11), Decl(declarationsAndAssignments.ts, 159, 11))
|
||||
>z : Symbol(z, Decl(declarationsAndAssignments.ts, 153, 7), Decl(declarationsAndAssignments.ts, 159, 14))
|
||||
>a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 155, 7), Decl(declarationsAndAssignments.ts, 159, 17))
|
||||
}
|
||||
|
||||
function f21() {
|
||||
>f21 : Symbol(f21, Decl(declarationsAndAssignments.ts, 163, 1))
|
||||
>f21 : Symbol(f21, Decl(declarationsAndAssignments.ts, 164, 1))
|
||||
|
||||
var a: (number | string | boolean)[];
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 166, 7), Decl(declarationsAndAssignments.ts, 170, 9), Decl(declarationsAndAssignments.ts, 171, 11), Decl(declarationsAndAssignments.ts, 172, 14), Decl(declarationsAndAssignments.ts, 173, 17))
|
||||
var x: number;
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9))
|
||||
|
||||
var x: number | string | boolean;
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 171, 9), Decl(declarationsAndAssignments.ts, 172, 9), Decl(declarationsAndAssignments.ts, 173, 9))
|
||||
var y: string;
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 176, 11), Decl(declarationsAndAssignments.ts, 177, 11))
|
||||
|
||||
var y: number | string | boolean;
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 172, 11), Decl(declarationsAndAssignments.ts, 173, 11))
|
||||
var z: boolean;
|
||||
>z : Symbol(z, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 14))
|
||||
|
||||
var z: number | string | boolean;
|
||||
>z : Symbol(z, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 173, 14))
|
||||
var a0: (number | string | boolean)[];
|
||||
>a0 : Symbol(a0, Decl(declarationsAndAssignments.ts, 170, 7), Decl(declarationsAndAssignments.ts, 174, 9))
|
||||
|
||||
var [...a] = [1, "hello", true];
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 166, 7), Decl(declarationsAndAssignments.ts, 170, 9), Decl(declarationsAndAssignments.ts, 171, 11), Decl(declarationsAndAssignments.ts, 172, 14), Decl(declarationsAndAssignments.ts, 173, 17))
|
||||
var a1: (string | boolean)[];
|
||||
>a1 : Symbol(a1, Decl(declarationsAndAssignments.ts, 171, 7), Decl(declarationsAndAssignments.ts, 175, 11))
|
||||
|
||||
var [x, ...a] = [1, "hello", true];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 171, 9), Decl(declarationsAndAssignments.ts, 172, 9), Decl(declarationsAndAssignments.ts, 173, 9))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 166, 7), Decl(declarationsAndAssignments.ts, 170, 9), Decl(declarationsAndAssignments.ts, 171, 11), Decl(declarationsAndAssignments.ts, 172, 14), Decl(declarationsAndAssignments.ts, 173, 17))
|
||||
var a2: boolean[];
|
||||
>a2 : Symbol(a2, Decl(declarationsAndAssignments.ts, 172, 7), Decl(declarationsAndAssignments.ts, 176, 14))
|
||||
|
||||
var [x, y, ...a] = [1, "hello", true];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 171, 9), Decl(declarationsAndAssignments.ts, 172, 9), Decl(declarationsAndAssignments.ts, 173, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 172, 11), Decl(declarationsAndAssignments.ts, 173, 11))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 166, 7), Decl(declarationsAndAssignments.ts, 170, 9), Decl(declarationsAndAssignments.ts, 171, 11), Decl(declarationsAndAssignments.ts, 172, 14), Decl(declarationsAndAssignments.ts, 173, 17))
|
||||
var a3: any[];
|
||||
>a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 173, 7), Decl(declarationsAndAssignments.ts, 177, 17))
|
||||
|
||||
var [x, y, z, ...a] = [1, "hello", true];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 171, 9), Decl(declarationsAndAssignments.ts, 172, 9), Decl(declarationsAndAssignments.ts, 173, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 172, 11), Decl(declarationsAndAssignments.ts, 173, 11))
|
||||
>z : Symbol(z, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 173, 14))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 166, 7), Decl(declarationsAndAssignments.ts, 170, 9), Decl(declarationsAndAssignments.ts, 171, 11), Decl(declarationsAndAssignments.ts, 172, 14), Decl(declarationsAndAssignments.ts, 173, 17))
|
||||
var [...a0] = [1, "hello", true];
|
||||
>a0 : Symbol(a0, Decl(declarationsAndAssignments.ts, 170, 7), Decl(declarationsAndAssignments.ts, 174, 9))
|
||||
|
||||
[...a] = [1, "hello", true];
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 166, 7), Decl(declarationsAndAssignments.ts, 170, 9), Decl(declarationsAndAssignments.ts, 171, 11), Decl(declarationsAndAssignments.ts, 172, 14), Decl(declarationsAndAssignments.ts, 173, 17))
|
||||
var [x, ...a1] = [1, "hello", true];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9))
|
||||
>a1 : Symbol(a1, Decl(declarationsAndAssignments.ts, 171, 7), Decl(declarationsAndAssignments.ts, 175, 11))
|
||||
|
||||
[x, ...a] = [1, "hello", true];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 171, 9), Decl(declarationsAndAssignments.ts, 172, 9), Decl(declarationsAndAssignments.ts, 173, 9))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 166, 7), Decl(declarationsAndAssignments.ts, 170, 9), Decl(declarationsAndAssignments.ts, 171, 11), Decl(declarationsAndAssignments.ts, 172, 14), Decl(declarationsAndAssignments.ts, 173, 17))
|
||||
var [x, y, ...a2] = [1, "hello", true];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 176, 11), Decl(declarationsAndAssignments.ts, 177, 11))
|
||||
>a2 : Symbol(a2, Decl(declarationsAndAssignments.ts, 172, 7), Decl(declarationsAndAssignments.ts, 176, 14))
|
||||
|
||||
[x, y, ...a] = [1, "hello", true];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 171, 9), Decl(declarationsAndAssignments.ts, 172, 9), Decl(declarationsAndAssignments.ts, 173, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 172, 11), Decl(declarationsAndAssignments.ts, 173, 11))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 166, 7), Decl(declarationsAndAssignments.ts, 170, 9), Decl(declarationsAndAssignments.ts, 171, 11), Decl(declarationsAndAssignments.ts, 172, 14), Decl(declarationsAndAssignments.ts, 173, 17))
|
||||
var [x, y, z, ...a3] = [1, "hello", true];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 176, 11), Decl(declarationsAndAssignments.ts, 177, 11))
|
||||
>z : Symbol(z, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 14))
|
||||
>a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 173, 7), Decl(declarationsAndAssignments.ts, 177, 17))
|
||||
|
||||
[x, y, z, ...a] = [1, "hello", true];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 171, 9), Decl(declarationsAndAssignments.ts, 172, 9), Decl(declarationsAndAssignments.ts, 173, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 172, 11), Decl(declarationsAndAssignments.ts, 173, 11))
|
||||
>z : Symbol(z, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 173, 14))
|
||||
>a : Symbol(a, Decl(declarationsAndAssignments.ts, 166, 7), Decl(declarationsAndAssignments.ts, 170, 9), Decl(declarationsAndAssignments.ts, 171, 11), Decl(declarationsAndAssignments.ts, 172, 14), Decl(declarationsAndAssignments.ts, 173, 17))
|
||||
[...a0] = [1, "hello", true];
|
||||
>a0 : Symbol(a0, Decl(declarationsAndAssignments.ts, 170, 7), Decl(declarationsAndAssignments.ts, 174, 9))
|
||||
|
||||
[x, ...a1] = [1, "hello", true];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9))
|
||||
>a1 : Symbol(a1, Decl(declarationsAndAssignments.ts, 171, 7), Decl(declarationsAndAssignments.ts, 175, 11))
|
||||
|
||||
[x, y, ...a2] = [1, "hello", true];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 176, 11), Decl(declarationsAndAssignments.ts, 177, 11))
|
||||
>a2 : Symbol(a2, Decl(declarationsAndAssignments.ts, 172, 7), Decl(declarationsAndAssignments.ts, 176, 14))
|
||||
|
||||
[x, y, z, ...a3] = [1, "hello", true];
|
||||
>x : Symbol(x, Decl(declarationsAndAssignments.ts, 167, 7), Decl(declarationsAndAssignments.ts, 175, 9), Decl(declarationsAndAssignments.ts, 176, 9), Decl(declarationsAndAssignments.ts, 177, 9))
|
||||
>y : Symbol(y, Decl(declarationsAndAssignments.ts, 168, 7), Decl(declarationsAndAssignments.ts, 176, 11), Decl(declarationsAndAssignments.ts, 177, 11))
|
||||
>z : Symbol(z, Decl(declarationsAndAssignments.ts, 169, 7), Decl(declarationsAndAssignments.ts, 177, 14))
|
||||
>a3 : Symbol(a3, Decl(declarationsAndAssignments.ts, 173, 7), Decl(declarationsAndAssignments.ts, 177, 17))
|
||||
}
|
||||
|
||||
|
||||
@@ -24,7 +24,7 @@ function f0() {
|
||||
>x : number
|
||||
>y : string
|
||||
>z : any
|
||||
>[1, "hello"] : [number, string, undefined]
|
||||
>[1, "hello"] : [number, string, undefined?]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
|
||||
@@ -254,17 +254,17 @@ function f7() {
|
||||
function f8() {
|
||||
>f8 : () => void
|
||||
|
||||
var [a, b, c] = []; // Ok, [] is an array
|
||||
var [a, b, c] = []; // Error, [] is an empty tuple
|
||||
>a : any
|
||||
>b : any
|
||||
>c : any
|
||||
>[] : [undefined, undefined, undefined]
|
||||
>[] : [undefined?, undefined?, undefined?]
|
||||
|
||||
var [d, e, f] = [1]; // Error, [1] is a tuple
|
||||
>d : number
|
||||
>e : any
|
||||
>f : any
|
||||
>[1] : [number, undefined, undefined]
|
||||
>[1] : [number, undefined?, undefined?]
|
||||
>1 : 1
|
||||
}
|
||||
|
||||
@@ -681,9 +681,6 @@ function f19() {
|
||||
function f20() {
|
||||
>f20 : () => void
|
||||
|
||||
var a: number[];
|
||||
>a : number[]
|
||||
|
||||
var x: number;
|
||||
>x : number
|
||||
|
||||
@@ -693,6 +690,12 @@ function f20() {
|
||||
var z: number;
|
||||
>z : number
|
||||
|
||||
var a: number[];
|
||||
>a : number[]
|
||||
|
||||
var a3: any[];
|
||||
>a3 : any[]
|
||||
|
||||
var [...a] = [1, 2, 3];
|
||||
>a : number[]
|
||||
>[1, 2, 3] : number[]
|
||||
@@ -703,7 +706,7 @@ function f20() {
|
||||
var [x, ...a] = [1, 2, 3];
|
||||
>x : number
|
||||
>a : number[]
|
||||
>[1, 2, 3] : number[]
|
||||
>[1, 2, 3] : [number, number, number]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
@@ -712,17 +715,17 @@ function f20() {
|
||||
>x : number
|
||||
>y : number
|
||||
>a : number[]
|
||||
>[1, 2, 3] : number[]
|
||||
>[1, 2, 3] : [number, number, number]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
|
||||
var [x, y, z, ...a] = [1, 2, 3];
|
||||
var [x, y, z, ...a3] = [1, 2, 3];
|
||||
>x : number
|
||||
>y : number
|
||||
>z : number
|
||||
>a : number[]
|
||||
>[1, 2, 3] : number[]
|
||||
>a3 : any[]
|
||||
>[1, 2, 3] : [number, number, number]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
@@ -738,37 +741,37 @@ function f20() {
|
||||
>3 : 3
|
||||
|
||||
[x, ...a] = [1, 2, 3];
|
||||
>[x, ...a] = [1, 2, 3] : number[]
|
||||
>[x, ...a] : number[]
|
||||
>[x, ...a] = [1, 2, 3] : [number, number, number]
|
||||
>[x, ...a] : [number, ...number[]]
|
||||
>x : number
|
||||
>...a : number
|
||||
>a : number[]
|
||||
>[1, 2, 3] : number[]
|
||||
>[1, 2, 3] : [number, number, number]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
|
||||
[x, y, ...a] = [1, 2, 3];
|
||||
>[x, y, ...a] = [1, 2, 3] : number[]
|
||||
>[x, y, ...a] : number[]
|
||||
>[x, y, ...a] = [1, 2, 3] : [number, number, number]
|
||||
>[x, y, ...a] : [number, number, ...number[]]
|
||||
>x : number
|
||||
>y : number
|
||||
>...a : number
|
||||
>a : number[]
|
||||
>[1, 2, 3] : number[]
|
||||
>[1, 2, 3] : [number, number, number]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
|
||||
[x, y, z, ...a] = [1, 2, 3];
|
||||
>[x, y, z, ...a] = [1, 2, 3] : number[]
|
||||
>[x, y, z, ...a] : number[]
|
||||
[x, y, z, ...a3] = [1, 2, 3];
|
||||
>[x, y, z, ...a3] = [1, 2, 3] : [number, number, number]
|
||||
>[x, y, z, ...a3] : [number, number, number, ...any[]]
|
||||
>x : number
|
||||
>y : number
|
||||
>z : number
|
||||
>...a : number
|
||||
>a : number[]
|
||||
>[1, 2, 3] : number[]
|
||||
>...a3 : any
|
||||
>a3 : any[]
|
||||
>[1, 2, 3] : [number, number, number]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
@@ -777,94 +780,103 @@ function f20() {
|
||||
function f21() {
|
||||
>f21 : () => void
|
||||
|
||||
var a: (number | string | boolean)[];
|
||||
>a : (string | number | boolean)[]
|
||||
var x: number;
|
||||
>x : number
|
||||
|
||||
var x: number | string | boolean;
|
||||
>x : string | number | boolean
|
||||
var y: string;
|
||||
>y : string
|
||||
|
||||
var y: number | string | boolean;
|
||||
>y : string | number | boolean
|
||||
var z: boolean;
|
||||
>z : boolean
|
||||
|
||||
var z: number | string | boolean;
|
||||
>z : string | number | boolean
|
||||
var a0: (number | string | boolean)[];
|
||||
>a0 : (string | number | boolean)[]
|
||||
|
||||
var [...a] = [1, "hello", true];
|
||||
>a : (string | number | boolean)[]
|
||||
var a1: (string | boolean)[];
|
||||
>a1 : (string | boolean)[]
|
||||
|
||||
var a2: boolean[];
|
||||
>a2 : boolean[]
|
||||
|
||||
var a3: any[];
|
||||
>a3 : any[]
|
||||
|
||||
var [...a0] = [1, "hello", true];
|
||||
>a0 : (string | number | boolean)[]
|
||||
>[1, "hello", true] : (string | number | boolean)[]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
var [x, ...a] = [1, "hello", true];
|
||||
>x : string | number | boolean
|
||||
>a : (string | number | boolean)[]
|
||||
>[1, "hello", true] : (string | number | boolean)[]
|
||||
var [x, ...a1] = [1, "hello", true];
|
||||
>x : number
|
||||
>a1 : (string | boolean)[]
|
||||
>[1, "hello", true] : [number, string, boolean]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
var [x, y, ...a] = [1, "hello", true];
|
||||
>x : string | number | boolean
|
||||
>y : string | number | boolean
|
||||
>a : (string | number | boolean)[]
|
||||
>[1, "hello", true] : (string | number | boolean)[]
|
||||
var [x, y, ...a2] = [1, "hello", true];
|
||||
>x : number
|
||||
>y : string
|
||||
>a2 : boolean[]
|
||||
>[1, "hello", true] : [number, string, boolean]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
var [x, y, z, ...a] = [1, "hello", true];
|
||||
>x : string | number | boolean
|
||||
>y : string | number | boolean
|
||||
>z : string | number | boolean
|
||||
>a : (string | number | boolean)[]
|
||||
>[1, "hello", true] : (string | number | boolean)[]
|
||||
var [x, y, z, ...a3] = [1, "hello", true];
|
||||
>x : number
|
||||
>y : string
|
||||
>z : boolean
|
||||
>a3 : any[]
|
||||
>[1, "hello", true] : [number, string, boolean]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
[...a] = [1, "hello", true];
|
||||
>[...a] = [1, "hello", true] : (string | number | true)[]
|
||||
>[...a] : (string | number | boolean)[]
|
||||
>...a : string | number | boolean
|
||||
>a : (string | number | boolean)[]
|
||||
[...a0] = [1, "hello", true];
|
||||
>[...a0] = [1, "hello", true] : (string | number | true)[]
|
||||
>[...a0] : (string | number | boolean)[]
|
||||
>...a0 : string | number | boolean
|
||||
>a0 : (string | number | boolean)[]
|
||||
>[1, "hello", true] : (string | number | true)[]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
[x, ...a] = [1, "hello", true];
|
||||
>[x, ...a] = [1, "hello", true] : (string | number | true)[]
|
||||
>[x, ...a] : (string | number | boolean)[]
|
||||
>x : string | number | boolean
|
||||
>...a : string | number | boolean
|
||||
>a : (string | number | boolean)[]
|
||||
>[1, "hello", true] : (string | number | true)[]
|
||||
[x, ...a1] = [1, "hello", true];
|
||||
>[x, ...a1] = [1, "hello", true] : [number, string, true]
|
||||
>[x, ...a1] : [number, ...(string | boolean)[]]
|
||||
>x : number
|
||||
>...a1 : string | boolean
|
||||
>a1 : (string | boolean)[]
|
||||
>[1, "hello", true] : [number, string, true]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
[x, y, ...a] = [1, "hello", true];
|
||||
>[x, y, ...a] = [1, "hello", true] : (string | number | true)[]
|
||||
>[x, y, ...a] : (string | number | boolean)[]
|
||||
>x : string | number | boolean
|
||||
>y : string | number | boolean
|
||||
>...a : string | number | boolean
|
||||
>a : (string | number | boolean)[]
|
||||
>[1, "hello", true] : (string | number | true)[]
|
||||
[x, y, ...a2] = [1, "hello", true];
|
||||
>[x, y, ...a2] = [1, "hello", true] : [number, string, true]
|
||||
>[x, y, ...a2] : [number, string, ...boolean[]]
|
||||
>x : number
|
||||
>y : string
|
||||
>...a2 : boolean
|
||||
>a2 : boolean[]
|
||||
>[1, "hello", true] : [number, string, true]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
[x, y, z, ...a] = [1, "hello", true];
|
||||
>[x, y, z, ...a] = [1, "hello", true] : (string | number | true)[]
|
||||
>[x, y, z, ...a] : (string | number | boolean)[]
|
||||
>x : string | number | boolean
|
||||
>y : string | number | boolean
|
||||
>z : string | number | boolean
|
||||
>...a : string | number | boolean
|
||||
>a : (string | number | boolean)[]
|
||||
>[1, "hello", true] : (string | number | true)[]
|
||||
[x, y, z, ...a3] = [1, "hello", true];
|
||||
>[x, y, z, ...a3] = [1, "hello", true] : [number, string, true]
|
||||
>[x, y, z, ...a3] : [number, string, boolean, ...any[]]
|
||||
>x : number
|
||||
>y : string
|
||||
>z : boolean
|
||||
>...a3 : any
|
||||
>a3 : any[]
|
||||
>[1, "hello", true] : [number, string, true]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
@@ -93,18 +93,18 @@ var [c0, c1] = [...temp];
|
||||
|
||||
var [c2] = [];
|
||||
>c2 : any
|
||||
>[] : [undefined]
|
||||
>[] : [undefined?]
|
||||
|
||||
var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]]
|
||||
>c3 : any
|
||||
>c4 : any
|
||||
>[[[]], [[[[]]]]] : [[[undefined]], [[[[undefined]]]]]
|
||||
>[[]] : [[undefined]]
|
||||
>[] : [undefined]
|
||||
>[[[[]]]] : [[[[undefined]]]]
|
||||
>[[[]]] : [[[undefined]]]
|
||||
>[[]] : [[undefined]]
|
||||
>[] : [undefined]
|
||||
>[[[]], [[[[]]]]] : [[[undefined?]], [[[[undefined?]]]]]
|
||||
>[[]] : [[undefined?]]
|
||||
>[] : [undefined?]
|
||||
>[[[[]]]] : [[[[undefined?]]]]
|
||||
>[[[]]] : [[[undefined?]]]
|
||||
>[[]] : [[undefined?]]
|
||||
>[] : [undefined?]
|
||||
|
||||
var [[c5], c6]: [[string|number], boolean] = [[1], true];
|
||||
>c5 : string | number
|
||||
@@ -149,7 +149,7 @@ var [,,,...c10] = [1, 2, 3, 4, "hello"];
|
||||
> : undefined
|
||||
> : undefined
|
||||
>c10 : (string | number)[]
|
||||
>[1, 2, 3, 4, "hello"] : (string | number)[]
|
||||
>[1, 2, 3, 4, "hello"] : [number, number, number, number, string]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
@@ -157,10 +157,10 @@ var [,,,...c10] = [1, 2, 3, 4, "hello"];
|
||||
>"hello" : "hello"
|
||||
|
||||
var [c11, c12, ...c13] = [1, 2, "string"];
|
||||
>c11 : string | number
|
||||
>c12 : string | number
|
||||
>c13 : (string | number)[]
|
||||
>[1, 2, "string"] : (string | number)[]
|
||||
>c11 : number
|
||||
>c12 : number
|
||||
>c13 : string[]
|
||||
>[1, 2, "string"] : [number, number, string]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>"string" : "string"
|
||||
|
||||
+13
-13
@@ -93,18 +93,18 @@ var [c0, c1] = [...temp];
|
||||
|
||||
var [c2] = [];
|
||||
>c2 : any
|
||||
>[] : [undefined]
|
||||
>[] : [undefined?]
|
||||
|
||||
var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]]
|
||||
>c3 : any
|
||||
>c4 : any
|
||||
>[[[]], [[[[]]]]] : [[[undefined]], [[[[undefined]]]]]
|
||||
>[[]] : [[undefined]]
|
||||
>[] : [undefined]
|
||||
>[[[[]]]] : [[[[undefined]]]]
|
||||
>[[[]]] : [[[undefined]]]
|
||||
>[[]] : [[undefined]]
|
||||
>[] : [undefined]
|
||||
>[[[]], [[[[]]]]] : [[[undefined?]], [[[[undefined?]]]]]
|
||||
>[[]] : [[undefined?]]
|
||||
>[] : [undefined?]
|
||||
>[[[[]]]] : [[[[undefined?]]]]
|
||||
>[[[]]] : [[[undefined?]]]
|
||||
>[[]] : [[undefined?]]
|
||||
>[] : [undefined?]
|
||||
|
||||
var [[c5], c6]: [[string|number], boolean] = [[1], true];
|
||||
>c5 : string | number
|
||||
@@ -149,7 +149,7 @@ var [,,,...c10] = [1, 2, 3, 4, "hello"];
|
||||
> : undefined
|
||||
> : undefined
|
||||
>c10 : (string | number)[]
|
||||
>[1, 2, 3, 4, "hello"] : (string | number)[]
|
||||
>[1, 2, 3, 4, "hello"] : [number, number, number, number, string]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
@@ -157,10 +157,10 @@ var [,,,...c10] = [1, 2, 3, 4, "hello"];
|
||||
>"hello" : "hello"
|
||||
|
||||
var [c11, c12, ...c13] = [1, 2, "string"];
|
||||
>c11 : string | number
|
||||
>c12 : string | number
|
||||
>c13 : (string | number)[]
|
||||
>[1, 2, "string"] : (string | number)[]
|
||||
>c11 : number
|
||||
>c12 : number
|
||||
>c13 : string[]
|
||||
>[1, 2, "string"] : [number, number, string]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>"string" : "string"
|
||||
|
||||
@@ -93,18 +93,18 @@ var [c0, c1] = [...temp];
|
||||
|
||||
var [c2] = [];
|
||||
>c2 : any
|
||||
>[] : [undefined]
|
||||
>[] : [undefined?]
|
||||
|
||||
var [[[c3]], [[[[c4]]]]] = [[[]], [[[[]]]]]
|
||||
>c3 : any
|
||||
>c4 : any
|
||||
>[[[]], [[[[]]]]] : [[[undefined]], [[[[undefined]]]]]
|
||||
>[[]] : [[undefined]]
|
||||
>[] : [undefined]
|
||||
>[[[[]]]] : [[[[undefined]]]]
|
||||
>[[[]]] : [[[undefined]]]
|
||||
>[[]] : [[undefined]]
|
||||
>[] : [undefined]
|
||||
>[[[]], [[[[]]]]] : [[[undefined?]], [[[[undefined?]]]]]
|
||||
>[[]] : [[undefined?]]
|
||||
>[] : [undefined?]
|
||||
>[[[[]]]] : [[[[undefined?]]]]
|
||||
>[[[]]] : [[[undefined?]]]
|
||||
>[[]] : [[undefined?]]
|
||||
>[] : [undefined?]
|
||||
|
||||
var [[c5], c6]: [[string|number], boolean] = [[1], true];
|
||||
>c5 : string | number
|
||||
@@ -149,7 +149,7 @@ var [,,,...c10] = [1, 2, 3, 4, "hello"];
|
||||
> : undefined
|
||||
> : undefined
|
||||
>c10 : (string | number)[]
|
||||
>[1, 2, 3, 4, "hello"] : (string | number)[]
|
||||
>[1, 2, 3, 4, "hello"] : [number, number, number, number, string]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
@@ -157,10 +157,10 @@ var [,,,...c10] = [1, 2, 3, 4, "hello"];
|
||||
>"hello" : "hello"
|
||||
|
||||
var [c11, c12, ...c13] = [1, 2, "string"];
|
||||
>c11 : string | number
|
||||
>c12 : string | number
|
||||
>c13 : (string | number)[]
|
||||
>[1, 2, "string"] : (string | number)[]
|
||||
>c11 : number
|
||||
>c12 : number
|
||||
>c13 : string[]
|
||||
>[1, 2, "string"] : [number, number, string]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>"string" : "string"
|
||||
|
||||
@@ -4,7 +4,7 @@
|
||||
var [[a0], [[a1]]] = [] // Error
|
||||
>a0 : any
|
||||
>a1 : any
|
||||
>[] : [undefined, undefined]
|
||||
>[] : [undefined?, undefined?]
|
||||
|
||||
var [[a2], [[a3]]] = undefined // Error
|
||||
>a2 : any
|
||||
|
||||
@@ -3,7 +3,7 @@ const [a, b = a] = [1]; // ok
|
||||
>a : any
|
||||
>b : any
|
||||
>a : any
|
||||
>[1] : [number, any]
|
||||
>[1] : [number, any?]
|
||||
>1 : 1
|
||||
|
||||
const [c, d = c, e = e] = [1]; // error for e = e
|
||||
@@ -12,7 +12,7 @@ const [c, d = c, e = e] = [1]; // error for e = e
|
||||
>c : any
|
||||
>e : any
|
||||
>e : any
|
||||
>[1] : [number, any, any]
|
||||
>[1] : [number, any?, any?]
|
||||
>1 : 1
|
||||
|
||||
const [f, g = f, h = i, i = f] = [1]; // error for h = i
|
||||
@@ -23,7 +23,7 @@ const [f, g = f, h = i, i = f] = [1]; // error for h = i
|
||||
>i : any
|
||||
>i : any
|
||||
>f : any
|
||||
>[1] : [number, any, any, any]
|
||||
>[1] : [number, any?, any?, any?]
|
||||
>1 : 1
|
||||
|
||||
(function ([a, b = a]) { // ok
|
||||
|
||||
@@ -229,7 +229,7 @@ function c5([a, b, [[c]]]) { }
|
||||
>c : any
|
||||
|
||||
function c6([a, b, [[c=1]]]) { }
|
||||
>c6 : ([a, b, [[c]]]: [any, any, [[number]]]) => void
|
||||
>c6 : ([a, b, [[c]]]: [any, any, [[number?]]]) => void
|
||||
>a : any
|
||||
>b : any
|
||||
>c : number
|
||||
|
||||
@@ -229,7 +229,7 @@ function c5([a, b, [[c]]]) { }
|
||||
>c : any
|
||||
|
||||
function c6([a, b, [[c=1]]]) { }
|
||||
>c6 : ([a, b, [[c]]]: [any, any, [[number]]]) => void
|
||||
>c6 : ([a, b, [[c]]]: [any, any, [[number?]]]) => void
|
||||
>a : any
|
||||
>b : any
|
||||
>c : number
|
||||
|
||||
@@ -212,7 +212,7 @@ function c5([a, b, [[c]]]) { }
|
||||
>c : any
|
||||
|
||||
function c6([a, b, [[c=1]]]) { }
|
||||
>c6 : ([a, b, [[c]]]: [any, any, [[number]]]) => void
|
||||
>c6 : ([a, b, [[c]]]: [any, any, [[number?]]]) => void
|
||||
>a : any
|
||||
>b : any
|
||||
>c : number
|
||||
|
||||
@@ -28,10 +28,11 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration2.ts(
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration2.ts(39,4): error TS2345: Argument of type '[number, number, boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]]]'.
|
||||
Types of property '2' are incompatible.
|
||||
Type 'boolean' is not assignable to type '[[any]]'.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration2.ts(40,4): error TS2345: Argument of type '[number, number, [[string]]]' is not assignable to parameter of type '[any, any, [[number]]]'.
|
||||
Type '[[string]]' is not assignable to type '[[number]]'.
|
||||
Type '[string]' is not assignable to type '[number]'.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration2.ts(40,4): error TS2345: Argument of type '[number, number, [[string]]]' is not assignable to parameter of type '[any, any, [[number?]]]'.
|
||||
Type '[[string]]' is not assignable to type '[[number?]]'.
|
||||
Type '[string]' is not assignable to type '[number?]'.
|
||||
Types of property '0' are incompatible.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration2.ts(46,13): error TS2463: A binding pattern parameter cannot be optional in an implementation signature.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration2.ts(47,13): error TS2463: A binding pattern parameter cannot be optional in an implementation signature.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration2.ts(56,8): error TS2463: A binding pattern parameter cannot be optional in an implementation signature.
|
||||
@@ -131,10 +132,11 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration2.ts(
|
||||
!!! error TS2345: Type 'boolean' is not assignable to type '[[any]]'.
|
||||
c6([1, 2, [["string"]]]); // Error, implied type is [any, any, [[number]]] // Use initializer
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2345: Argument of type '[number, number, [[string]]]' is not assignable to parameter of type '[any, any, [[number]]]'.
|
||||
!!! error TS2345: Type '[[string]]' is not assignable to type '[[number]]'.
|
||||
!!! error TS2345: Type '[string]' is not assignable to type '[number]'.
|
||||
!!! error TS2345: Type 'string' is not assignable to type 'number'.
|
||||
!!! error TS2345: Argument of type '[number, number, [[string]]]' is not assignable to parameter of type '[any, any, [[number?]]]'.
|
||||
!!! error TS2345: Type '[[string]]' is not assignable to type '[[number?]]'.
|
||||
!!! error TS2345: Type '[string]' is not assignable to type '[number?]'.
|
||||
!!! error TS2345: Types of property '0' are incompatible.
|
||||
!!! error TS2345: Type 'string' is not assignable to type 'number'.
|
||||
|
||||
// A parameter can be marked optional by following its name or binding pattern with a question mark (?)
|
||||
// or by including an initializer. Initializers (including binding property or element initializers) are
|
||||
|
||||
@@ -143,7 +143,7 @@ function c5([a, b, [[c]]]) { }
|
||||
>c : any
|
||||
|
||||
function c6([a, b, [[c = 1]]]) { }
|
||||
>c6 : ([a, b, [[c]]]: [any, any, [[number]]]) => void
|
||||
>c6 : ([a, b, [[c]]]: [any, any, [[number?]]]) => void
|
||||
>a : any
|
||||
>b : any
|
||||
>c : number
|
||||
@@ -193,7 +193,7 @@ c5([1, 2, false, true]); // Error, implied type is [any, any, [[any]]]
|
||||
|
||||
c6([1, 2, [["string"]]]); // Error, implied type is [any, any, [[number]]] // Use initializer
|
||||
>c6([1, 2, [["string"]]]) : void
|
||||
>c6 : ([a, b, [[c]]]: [any, any, [[number]]]) => void
|
||||
>c6 : ([a, b, [[c]]]: [any, any, [[number?]]]) => void
|
||||
>[1, 2, [["string"]]] : (number | string[][])[]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES5.ts(26,4): error TS2345: Argument of type '[number, number, [[string]], boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]]]'.
|
||||
Types of property 'length' are incompatible.
|
||||
Type '5' is not assignable to type '3'.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES5.ts(29,5): error TS2345: Argument of type '[number, number, number, boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]], ...any[]]'.
|
||||
Types of property '2' are incompatible.
|
||||
Type 'number' is not assignable to type '[[any]]'.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES5.ts(30,5): error TS2345: Argument of type '[number, number]' is not assignable to parameter of type '[any, any, [[any]], ...any[]]'.
|
||||
Property '2' is missing in type '[number, number]'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES5.ts (1 errors) ====
|
||||
==== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES5.ts (3 errors) ====
|
||||
// If the parameter is a rest parameter, the parameter type is any[]
|
||||
// A type annotation for a rest parameter must denote an array type.
|
||||
|
||||
@@ -37,7 +42,14 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES5.
|
||||
|
||||
a10([1, 2, [["string"]], false, true]); // Parameter type is any[]
|
||||
a10([1, 2, 3, false, true]); // Parameter type is any[]
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2345: Argument of type '[number, number, number, boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]], ...any[]]'.
|
||||
!!! error TS2345: Types of property '2' are incompatible.
|
||||
!!! error TS2345: Type 'number' is not assignable to type '[[any]]'.
|
||||
a10([1, 2]); // Parameter type is any[]
|
||||
~~~~~~
|
||||
!!! error TS2345: Argument of type '[number, number]' is not assignable to parameter of type '[any, any, [[any]], ...any[]]'.
|
||||
!!! error TS2345: Property '2' is missing in type '[number, number]'.
|
||||
a11([1, 2]); // Parameter type is number[]
|
||||
|
||||
// Rest parameter with generic
|
||||
|
||||
@@ -52,7 +52,7 @@ function a9([a, b, [[c]]]) { }
|
||||
>c : any
|
||||
|
||||
function a10([a, b, [[c]], ...x]) { }
|
||||
>a10 : ([a, b, [[c]], ...x]: Iterable<any>) => void
|
||||
>a10 : ([a, b, [[c]], ...x]: [any, any, [[any]], ...any[]]) => void
|
||||
>a : any
|
||||
>b : any
|
||||
>c : any
|
||||
@@ -107,19 +107,19 @@ a9([1, 2, [["string"]], false, true]); // Parameter type is [any, any, [[any]]
|
||||
|
||||
a10([1, 2, [["string"]], false, true]); // Parameter type is any[]
|
||||
>a10([1, 2, [["string"]], false, true]) : void
|
||||
>a10 : ([a, b, [[c]], ...x]: Iterable<any>) => void
|
||||
>[1, 2, [["string"]], false, true] : (number | boolean | string[][])[]
|
||||
>a10 : ([a, b, [[c]], ...x]: [any, any, [[any]], ...any[]]) => void
|
||||
>[1, 2, [["string"]], false, true] : [number, number, [[string]], boolean, boolean]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>[["string"]] : string[][]
|
||||
>["string"] : string[]
|
||||
>[["string"]] : [[string]]
|
||||
>["string"] : [string]
|
||||
>"string" : "string"
|
||||
>false : false
|
||||
>true : true
|
||||
|
||||
a10([1, 2, 3, false, true]); // Parameter type is any[]
|
||||
>a10([1, 2, 3, false, true]) : void
|
||||
>a10 : ([a, b, [[c]], ...x]: Iterable<any>) => void
|
||||
>a10 : ([a, b, [[c]], ...x]: [any, any, [[any]], ...any[]]) => void
|
||||
>[1, 2, 3, false, true] : (number | boolean)[]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
@@ -129,7 +129,7 @@ a10([1, 2, 3, false, true]); // Parameter type is any[]
|
||||
|
||||
a10([1, 2]); // Parameter type is any[]
|
||||
>a10([1, 2]) : void
|
||||
>a10 : ([a, b, [[c]], ...x]: Iterable<any>) => void
|
||||
>a10 : ([a, b, [[c]], ...x]: [any, any, [[any]], ...any[]]) => void
|
||||
>[1, 2] : number[]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES5iterable.ts(26,4): error TS2345: Argument of type '[number, number, [[string]], boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]]]'.
|
||||
Types of property 'length' are incompatible.
|
||||
Type '5' is not assignable to type '3'.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES5iterable.ts(29,5): error TS2345: Argument of type '[number, number, number, boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]], ...any[]]'.
|
||||
Types of property '2' are incompatible.
|
||||
Type 'number' is not assignable to type '[[any]]'.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES5iterable.ts(30,5): error TS2345: Argument of type '[number, number]' is not assignable to parameter of type '[any, any, [[any]], ...any[]]'.
|
||||
Property '2' is missing in type '[number, number]'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES5iterable.ts (1 errors) ====
|
||||
==== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES5iterable.ts (3 errors) ====
|
||||
// If the parameter is a rest parameter, the parameter type is any[]
|
||||
// A type annotation for a rest parameter must denote an array type.
|
||||
|
||||
@@ -37,7 +42,14 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES5i
|
||||
|
||||
a10([1, 2, [["string"]], false, true]); // Parameter type is any[]
|
||||
a10([1, 2, 3, false, true]); // Parameter type is any[]
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2345: Argument of type '[number, number, number, boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]], ...any[]]'.
|
||||
!!! error TS2345: Types of property '2' are incompatible.
|
||||
!!! error TS2345: Type 'number' is not assignable to type '[[any]]'.
|
||||
a10([1, 2]); // Parameter type is any[]
|
||||
~~~~~~
|
||||
!!! error TS2345: Argument of type '[number, number]' is not assignable to parameter of type '[any, any, [[any]], ...any[]]'.
|
||||
!!! error TS2345: Property '2' is missing in type '[number, number]'.
|
||||
a11([1, 2]); // Parameter type is number[]
|
||||
|
||||
// Rest parameter with generic
|
||||
|
||||
@@ -52,7 +52,7 @@ function a9([a, b, [[c]]]) { }
|
||||
>c : any
|
||||
|
||||
function a10([a, b, [[c]], ...x]) { }
|
||||
>a10 : ([a, b, [[c]], ...x]: any[]) => void
|
||||
>a10 : ([a, b, [[c]], ...x]: [any, any, [[any]], ...any[]]) => void
|
||||
>a : any
|
||||
>b : any
|
||||
>c : any
|
||||
@@ -107,19 +107,19 @@ a9([1, 2, [["string"]], false, true]); // Parameter type is [any, any, [[any]]
|
||||
|
||||
a10([1, 2, [["string"]], false, true]); // Parameter type is any[]
|
||||
>a10([1, 2, [["string"]], false, true]) : void
|
||||
>a10 : ([a, b, [[c]], ...x]: any[]) => void
|
||||
>[1, 2, [["string"]], false, true] : (number | boolean | string[][])[]
|
||||
>a10 : ([a, b, [[c]], ...x]: [any, any, [[any]], ...any[]]) => void
|
||||
>[1, 2, [["string"]], false, true] : [number, number, [[string]], boolean, boolean]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>[["string"]] : string[][]
|
||||
>["string"] : string[]
|
||||
>[["string"]] : [[string]]
|
||||
>["string"] : [string]
|
||||
>"string" : "string"
|
||||
>false : false
|
||||
>true : true
|
||||
|
||||
a10([1, 2, 3, false, true]); // Parameter type is any[]
|
||||
>a10([1, 2, 3, false, true]) : void
|
||||
>a10 : ([a, b, [[c]], ...x]: any[]) => void
|
||||
>a10 : ([a, b, [[c]], ...x]: [any, any, [[any]], ...any[]]) => void
|
||||
>[1, 2, 3, false, true] : (number | boolean)[]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
@@ -129,7 +129,7 @@ a10([1, 2, 3, false, true]); // Parameter type is any[]
|
||||
|
||||
a10([1, 2]); // Parameter type is any[]
|
||||
>a10([1, 2]) : void
|
||||
>a10 : ([a, b, [[c]], ...x]: any[]) => void
|
||||
>a10 : ([a, b, [[c]], ...x]: [any, any, [[any]], ...any[]]) => void
|
||||
>[1, 2] : number[]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
|
||||
@@ -1,9 +1,14 @@
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES6.ts(26,4): error TS2345: Argument of type '[number, number, [[string]], boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]]]'.
|
||||
Types of property 'length' are incompatible.
|
||||
Type '5' is not assignable to type '3'.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES6.ts(29,5): error TS2345: Argument of type '[number, number, number, boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]], ...any[]]'.
|
||||
Types of property '2' are incompatible.
|
||||
Type 'number' is not assignable to type '[[any]]'.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES6.ts(30,5): error TS2345: Argument of type '[number, number]' is not assignable to parameter of type '[any, any, [[any]], ...any[]]'.
|
||||
Property '2' is missing in type '[number, number]'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES6.ts (1 errors) ====
|
||||
==== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES6.ts (3 errors) ====
|
||||
// If the parameter is a rest parameter, the parameter type is any[]
|
||||
// A type annotation for a rest parameter must denote an array type.
|
||||
|
||||
@@ -37,7 +42,14 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration3ES6.
|
||||
|
||||
a10([1, 2, [["string"]], false, true]); // Parameter type is any[]
|
||||
a10([1, 2, 3, false, true]); // Parameter type is any[]
|
||||
~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2345: Argument of type '[number, number, number, boolean, boolean]' is not assignable to parameter of type '[any, any, [[any]], ...any[]]'.
|
||||
!!! error TS2345: Types of property '2' are incompatible.
|
||||
!!! error TS2345: Type 'number' is not assignable to type '[[any]]'.
|
||||
a10([1, 2]); // Parameter type is any[]
|
||||
~~~~~~
|
||||
!!! error TS2345: Argument of type '[number, number]' is not assignable to parameter of type '[any, any, [[any]], ...any[]]'.
|
||||
!!! error TS2345: Property '2' is missing in type '[number, number]'.
|
||||
a11([1, 2]); // Parameter type is number[]
|
||||
|
||||
// Rest parameter with generic
|
||||
|
||||
@@ -52,7 +52,7 @@ function a9([a, b, [[c]]]) { }
|
||||
>c : any
|
||||
|
||||
function a10([a, b, [[c]], ...x]) { }
|
||||
>a10 : ([a, b, [[c]], ...x]: Iterable<any>) => void
|
||||
>a10 : ([a, b, [[c]], ...x]: [any, any, [[any]], ...any[]]) => void
|
||||
>a : any
|
||||
>b : any
|
||||
>c : any
|
||||
@@ -107,19 +107,19 @@ a9([1, 2, [["string"]], false, true]); // Parameter type is [any, any, [[any]]
|
||||
|
||||
a10([1, 2, [["string"]], false, true]); // Parameter type is any[]
|
||||
>a10([1, 2, [["string"]], false, true]) : void
|
||||
>a10 : ([a, b, [[c]], ...x]: Iterable<any>) => void
|
||||
>[1, 2, [["string"]], false, true] : (number | boolean | string[][])[]
|
||||
>a10 : ([a, b, [[c]], ...x]: [any, any, [[any]], ...any[]]) => void
|
||||
>[1, 2, [["string"]], false, true] : [number, number, [[string]], boolean, boolean]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>[["string"]] : string[][]
|
||||
>["string"] : string[]
|
||||
>[["string"]] : [[string]]
|
||||
>["string"] : [string]
|
||||
>"string" : "string"
|
||||
>false : false
|
||||
>true : true
|
||||
|
||||
a10([1, 2, 3, false, true]); // Parameter type is any[]
|
||||
>a10([1, 2, 3, false, true]) : void
|
||||
>a10 : ([a, b, [[c]], ...x]: Iterable<any>) => void
|
||||
>a10 : ([a, b, [[c]], ...x]: [any, any, [[any]], ...any[]]) => void
|
||||
>[1, 2, 3, false, true] : (number | boolean)[]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
@@ -129,7 +129,7 @@ a10([1, 2, 3, false, true]); // Parameter type is any[]
|
||||
|
||||
a10([1, 2]); // Parameter type is any[]
|
||||
>a10([1, 2]) : void
|
||||
>a10 : ([a, b, [[c]], ...x]: Iterable<any>) => void
|
||||
>a10 : ([a, b, [[c]], ...x]: [any, any, [[any]], ...any[]]) => void
|
||||
>[1, 2] : number[]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
|
||||
@@ -1,4 +1,3 @@
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(11,13): error TS2370: A rest parameter must be of an array type.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(13,13): error TS2370: A rest parameter must be of an array type.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(14,17): error TS1047: A rest parameter cannot be optional.
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(15,16): error TS1048: A rest parameter cannot have an initializer.
|
||||
@@ -17,7 +16,7 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(
|
||||
tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(34,28): error TS2304: Cannot find name 'E'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts (12 errors) ====
|
||||
==== tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts (11 errors) ====
|
||||
// If the parameter is a rest parameter, the parameter type is any[]
|
||||
// A type annotation for a rest parameter must denote an array type.
|
||||
|
||||
@@ -29,8 +28,6 @@ tests/cases/conformance/es6/destructuring/destructuringParameterDeclaration4.ts(
|
||||
type stringOrNumArray = Array<String|Number>;
|
||||
|
||||
function a0(...x: [number, number, string]) { } // Error, rest parameter must be array type
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2370: A rest parameter must be of an array type.
|
||||
function a1(...x: (number|string)[]) { }
|
||||
function a2(...a: someArray) { } // Error, rest parameter must be array type
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
@@ -22,7 +22,7 @@ type stringOrNumArray = Array<String|Number>;
|
||||
>Number : Number
|
||||
|
||||
function a0(...x: [number, number, string]) { } // Error, rest parameter must be array type
|
||||
>a0 : (...x: [number, number, string]) => void
|
||||
>a0 : (x_0: number, x_1: number, x_2: string) => void
|
||||
>x : [number, number, string]
|
||||
|
||||
function a1(...x: (number|string)[]) { }
|
||||
|
||||
@@ -113,9 +113,9 @@ var temp1 = [true, false, true]
|
||||
>true : true
|
||||
|
||||
var [d3, d4] = [1, "string", ...temp1];
|
||||
>d3 : string | number | boolean
|
||||
>d4 : string | number | boolean
|
||||
>[1, "string", ...temp1] : (string | number | boolean)[]
|
||||
>d3 : number
|
||||
>d4 : string
|
||||
>[1, "string", ...temp1] : [number, string, ...boolean[]]
|
||||
>1 : 1
|
||||
>"string" : "string"
|
||||
>...temp1 : boolean
|
||||
@@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] };
|
||||
>f4 : number
|
||||
>f5 : number
|
||||
> : undefined
|
||||
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined]; }
|
||||
>f : [number, number, { f3: number; f5: number; }, undefined]
|
||||
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined]
|
||||
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined?]; }
|
||||
>f : [number, number, { f3: number; f5: number; }, undefined?]
|
||||
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined?]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>{ f3: 4, f5: 0 } : { f3: number; f5: number; }
|
||||
|
||||
@@ -113,9 +113,9 @@ var temp1 = [true, false, true]
|
||||
>true : true
|
||||
|
||||
var [d3, d4] = [1, "string", ...temp1];
|
||||
>d3 : string | number | boolean
|
||||
>d4 : string | number | boolean
|
||||
>[1, "string", ...temp1] : (string | number | boolean)[]
|
||||
>d3 : number
|
||||
>d4 : string
|
||||
>[1, "string", ...temp1] : [number, string, ...boolean[]]
|
||||
>1 : 1
|
||||
>"string" : "string"
|
||||
>...temp1 : boolean
|
||||
@@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] };
|
||||
>f4 : number
|
||||
>f5 : number
|
||||
> : undefined
|
||||
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined]; }
|
||||
>f : [number, number, { f3: number; f5: number; }, undefined]
|
||||
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined]
|
||||
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined?]; }
|
||||
>f : [number, number, { f3: number; f5: number; }, undefined?]
|
||||
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined?]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>{ f3: 4, f5: 0 } : { f3: number; f5: number; }
|
||||
|
||||
@@ -113,9 +113,9 @@ var temp1 = [true, false, true]
|
||||
>true : true
|
||||
|
||||
var [d3, d4] = [1, "string", ...temp1];
|
||||
>d3 : string | number | boolean
|
||||
>d4 : string | number | boolean
|
||||
>[1, "string", ...temp1] : (string | number | boolean)[]
|
||||
>d3 : number
|
||||
>d4 : string
|
||||
>[1, "string", ...temp1] : [number, string, ...boolean[]]
|
||||
>1 : 1
|
||||
>"string" : "string"
|
||||
>...temp1 : boolean
|
||||
@@ -151,9 +151,9 @@ var {f: [f1, f2, { f3: f4, f5 }, , ]} = { f: [1, 2, { f3: 4, f5: 0 }] };
|
||||
>f4 : number
|
||||
>f5 : number
|
||||
> : undefined
|
||||
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined]; }
|
||||
>f : [number, number, { f3: number; f5: number; }, undefined]
|
||||
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined]
|
||||
>{ f: [1, 2, { f3: 4, f5: 0 }] } : { f: [number, number, { f3: number; f5: number; }, undefined?]; }
|
||||
>f : [number, number, { f3: number; f5: number; }, undefined?]
|
||||
>[1, 2, { f3: 4, f5: 0 }] : [number, number, { f3: number; f5: number; }, undefined?]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>{ f3: 4, f5: 0 } : { f3: number; f5: number; }
|
||||
|
||||
@@ -5,11 +5,9 @@ tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(4
|
||||
Type '[[boolean]]' is not assignable to type '[[string]]'.
|
||||
Type '[boolean]' is not assignable to type '[string]'.
|
||||
Type 'boolean' is not assignable to type 'string'.
|
||||
tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(14,16): error TS2459: Type 'number | { c3: number; c5: number; }' has no property 'c3' and no string index signature.
|
||||
tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(14,24): error TS2459: Type 'number | { c3: number; c5: number; }' has no property 'c5' and no string index signature.
|
||||
|
||||
|
||||
==== tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts (4 errors) ====
|
||||
==== tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts (2 errors) ====
|
||||
// The type T associated with a destructuring variable declaration is determined as follows:
|
||||
// If the declaration includes a type annotation, T is that type.
|
||||
var {a1, a2}: { a1: number, a2: string } = { a1: true, a2: 1 } // Error
|
||||
@@ -33,10 +31,6 @@ tests/cases/conformance/es6/destructuring/destructuringVariableDeclaration2.ts(1
|
||||
// If the binding element is a rest element, T is an array type with
|
||||
// an element type E, where E is the type of the numeric index signature of S.
|
||||
var [c1, c2, { c3: c4, c5 }, , ...c6] = [1, 2, { c3: 4, c5: 0 }]; // Error
|
||||
~~
|
||||
!!! error TS2459: Type 'number | { c3: number; c5: number; }' has no property 'c3' and no string index signature.
|
||||
~~
|
||||
!!! error TS2459: Type 'number | { c3: number; c5: number; }' has no property 'c5' and no string index signature.
|
||||
|
||||
// When a destructuring variable declaration, binding property, or binding element specifies
|
||||
// an initializer expression, the type of the initializer expression is required to be assignable
|
||||
|
||||
@@ -35,6 +35,7 @@ var [b0 = 3, b1 = true, b2 = temp] = [3, false, { t1: false, t2: 5}]; // Error
|
||||
var [c1, c2, { c3: c4, c5 }, , ...c6] = [1, 2, { c3: 4, c5: 0 }]; // Error
|
||||
>c1 : Symbol(c1, Decl(destructuringVariableDeclaration2.ts, 13, 5))
|
||||
>c2 : Symbol(c2, Decl(destructuringVariableDeclaration2.ts, 13, 8))
|
||||
>c3 : Symbol(c3, Decl(destructuringVariableDeclaration2.ts, 13, 48))
|
||||
>c4 : Symbol(c4, Decl(destructuringVariableDeclaration2.ts, 13, 14))
|
||||
>c5 : Symbol(c5, Decl(destructuringVariableDeclaration2.ts, 13, 22))
|
||||
>c6 : Symbol(c6, Decl(destructuringVariableDeclaration2.ts, 13, 30))
|
||||
|
||||
@@ -53,14 +53,14 @@ var [b0 = 3, b1 = true, b2 = temp] = [3, false, { t1: false, t2: 5}]; // Error
|
||||
// If the binding element is a rest element, T is an array type with
|
||||
// an element type E, where E is the type of the numeric index signature of S.
|
||||
var [c1, c2, { c3: c4, c5 }, , ...c6] = [1, 2, { c3: 4, c5: 0 }]; // Error
|
||||
>c1 : number | { c3: number; c5: number; }
|
||||
>c2 : number | { c3: number; c5: number; }
|
||||
>c1 : number
|
||||
>c2 : number
|
||||
>c3 : any
|
||||
>c4 : any
|
||||
>c5 : any
|
||||
>c4 : number
|
||||
>c5 : number
|
||||
> : undefined
|
||||
>c6 : (number | { c3: number; c5: number; })[]
|
||||
>[1, 2, { c3: 4, c5: 0 }] : (number | { c3: number; c5: number; })[]
|
||||
>c6 : any[]
|
||||
>[1, 2, { c3: 4, c5: 0 }] : [number, number, { c3: number; c5: number; }, undefined?]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>{ c3: 4, c5: 0 } : { c3: number; c5: number; }
|
||||
|
||||
@@ -235,7 +235,7 @@ g1([1, 1]);
|
||||
|
||||
// (arg: [number, number]) => void
|
||||
function g2([x = 0, y = 0]) { }
|
||||
>g2 : ([x, y]: [number, number]) => void
|
||||
>g2 : ([x, y]: [number?, number?]) => void
|
||||
>x : number
|
||||
>0 : 0
|
||||
>y : number
|
||||
@@ -243,7 +243,7 @@ function g2([x = 0, y = 0]) { }
|
||||
|
||||
g2([1, 1]);
|
||||
>g2([1, 1]) : void
|
||||
>g2 : ([x, y]: [number, number]) => void
|
||||
>g2 : ([x, y]: [number?, number?]) => void
|
||||
>[1, 1] : [number, number]
|
||||
>1 : 1
|
||||
>1 : 1
|
||||
@@ -270,40 +270,40 @@ g3([1, 1]);
|
||||
|
||||
// (arg?: [number, number]) => void
|
||||
function g4([x, y = 0] = [0]) { }
|
||||
>g4 : ([x, y]?: [number, number]) => void
|
||||
>g4 : ([x, y]?: [number, number?]) => void
|
||||
>x : number
|
||||
>y : number
|
||||
>0 : 0
|
||||
>[0] : [number, number]
|
||||
>[0] : [number, number?]
|
||||
>0 : 0
|
||||
|
||||
g4();
|
||||
>g4() : void
|
||||
>g4 : ([x, y]?: [number, number]) => void
|
||||
>g4 : ([x, y]?: [number, number?]) => void
|
||||
|
||||
g4([1, 1]);
|
||||
>g4([1, 1]) : void
|
||||
>g4 : ([x, y]?: [number, number]) => void
|
||||
>g4 : ([x, y]?: [number, number?]) => void
|
||||
>[1, 1] : [number, number]
|
||||
>1 : 1
|
||||
>1 : 1
|
||||
|
||||
// (arg?: [number, number]) => void
|
||||
function g5([x = 0, y = 0] = []) { }
|
||||
>g5 : ([x, y]?: [number, number]) => void
|
||||
>g5 : ([x, y]?: [number?, number?]) => void
|
||||
>x : number
|
||||
>0 : 0
|
||||
>y : number
|
||||
>0 : 0
|
||||
>[] : [number, number]
|
||||
>[] : [number?, number?]
|
||||
|
||||
g5();
|
||||
>g5() : void
|
||||
>g5 : ([x, y]?: [number, number]) => void
|
||||
>g5 : ([x, y]?: [number?, number?]) => void
|
||||
|
||||
g5([1, 1]);
|
||||
>g5([1, 1]) : void
|
||||
>g5 : ([x, y]?: [number, number]) => void
|
||||
>g5 : ([x, y]?: [number?, number?]) => void
|
||||
>[1, 1] : [number, number]
|
||||
>1 : 1
|
||||
>1 : 1
|
||||
|
||||
@@ -12,7 +12,7 @@ const bar = 1;
|
||||
|
||||
let [baz] = [];
|
||||
>baz : any
|
||||
>[] : [undefined]
|
||||
>[] : [undefined?]
|
||||
|
||||
let {a: baz2} = { a: 1 };
|
||||
>a : any
|
||||
@@ -23,7 +23,7 @@ let {a: baz2} = { a: 1 };
|
||||
|
||||
const [baz3] = []
|
||||
>baz3 : any
|
||||
>[] : [undefined]
|
||||
>[] : [undefined?]
|
||||
|
||||
const {a: baz4} = { a: 1 };
|
||||
>a : any
|
||||
|
||||
@@ -516,7 +516,7 @@ function foo3() {
|
||||
}
|
||||
for (let [y] = []; ;) {
|
||||
>y : any
|
||||
>[] : [undefined]
|
||||
>[] : [undefined?]
|
||||
|
||||
use(y);
|
||||
>use(y) : any
|
||||
@@ -555,7 +555,7 @@ function foo4() {
|
||||
}
|
||||
for (const [y] = []; ;) {
|
||||
>y : any
|
||||
>[] : [undefined]
|
||||
>[] : [undefined?]
|
||||
|
||||
use(y);
|
||||
>use(y) : any
|
||||
|
||||
+1
-1
@@ -40,7 +40,7 @@ function f5({e, e: {e}}, {e}, [d,e, [[e]]], ...e) { }
|
||||
>e : any[]
|
||||
|
||||
function f6([f, ...f]) { }
|
||||
>f6 : ([f, ...f]: any[]) => void
|
||||
>f6 : ([f, ...f]: [any, ...any[]]) => void
|
||||
>f : any
|
||||
>f : any[]
|
||||
|
||||
|
||||
+1
-1
@@ -43,7 +43,7 @@ function f5({e, e: {e}}, {e}, [d, e, [[e]]], ...e) { }
|
||||
>e : any[]
|
||||
|
||||
function f6([f, ...f]) { }
|
||||
>f6 : ([f, ...f]: any[]) => void
|
||||
>f6 : ([f, ...f]: [any, ...any[]]) => void
|
||||
>f : any
|
||||
>f : any[]
|
||||
|
||||
|
||||
@@ -58,14 +58,14 @@ var p3 = ([, a]) => { };
|
||||
>a : any
|
||||
|
||||
var p4 = ([, ...a]) => { };
|
||||
>p4 : ([, ...a]: Iterable<any>) => void
|
||||
>([, ...a]) => { } : ([, ...a]: Iterable<any>) => void
|
||||
>p4 : ([, ...a]: [any?, ...any[]]) => void
|
||||
>([, ...a]) => { } : ([, ...a]: [any?, ...any[]]) => void
|
||||
> : undefined
|
||||
>a : any[]
|
||||
|
||||
var p5 = ([a = 1]) => { };
|
||||
>p5 : ([a]: [number]) => void
|
||||
>([a = 1]) => { } : ([a]: [number]) => void
|
||||
>p5 : ([a]: [number?]) => void
|
||||
>([a = 1]) => { } : ([a]: [number?]) => void
|
||||
>a : number
|
||||
>1 : 1
|
||||
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion01.ts(1,10): error TS1122: A tuple type element list cannot be empty.
|
||||
|
||||
|
||||
==== tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion01.ts (1 errors) ====
|
||||
let x = <[]>[];
|
||||
~~
|
||||
!!! error TS1122: A tuple type element list cannot be empty.
|
||||
let y = x[0];
|
||||
@@ -2,7 +2,7 @@
|
||||
let x = <[]>[];
|
||||
>x : []
|
||||
><[]>[] : []
|
||||
>[] : undefined[]
|
||||
>[] : []
|
||||
|
||||
let y = x[0];
|
||||
>y : never
|
||||
|
||||
@@ -1,8 +0,0 @@
|
||||
tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion02.ts(1,15): error TS1122: A tuple type element list cannot be empty.
|
||||
|
||||
|
||||
==== tests/cases/conformance/types/tuple/emptyTuples/emptyTuplesTypeAssertion02.ts (1 errors) ====
|
||||
let x = [] as [];
|
||||
~~
|
||||
!!! error TS1122: A tuple type element list cannot be empty.
|
||||
let y = x[0];
|
||||
@@ -2,7 +2,7 @@
|
||||
let x = [] as [];
|
||||
>x : []
|
||||
>[] as [] : []
|
||||
>[] : undefined[]
|
||||
>[] : []
|
||||
|
||||
let y = x[0];
|
||||
>y : never
|
||||
|
||||
@@ -1,14 +0,0 @@
|
||||
tests/cases/conformance/es6/for-ofStatements/for-of49.ts(3,14): error TS2322: Type 'string | boolean' is not assignable to type 'boolean'.
|
||||
Type 'string' is not assignable to type 'boolean'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/es6/for-ofStatements/for-of49.ts (1 errors) ====
|
||||
var k: string, v: boolean;
|
||||
var map = new Map([["", true]]);
|
||||
for ([k, ...[v]] of map) {
|
||||
~
|
||||
!!! error TS2322: Type 'string | boolean' is not assignable to type 'boolean'.
|
||||
!!! error TS2322: Type 'string' is not assignable to type 'boolean'.
|
||||
k;
|
||||
v;
|
||||
}
|
||||
@@ -13,7 +13,7 @@ var map = new Map([["", true]]);
|
||||
>true : true
|
||||
|
||||
for ([k, ...[v]] of map) {
|
||||
>[k, ...[v]] : (string | boolean)[]
|
||||
>[k, ...[v]] : [string, ...boolean[]]
|
||||
>k : string
|
||||
>...[v] : boolean
|
||||
>[v] : [boolean]
|
||||
|
||||
@@ -0,0 +1,164 @@
|
||||
tests/cases/conformance/types/rest/genericRestParameters1.ts(22,1): error TS2556: Expected 3 arguments, but got 1 or more.
|
||||
tests/cases/conformance/types/rest/genericRestParameters1.ts(31,1): error TS2556: Expected 3 arguments, but got 1 or more.
|
||||
|
||||
|
||||
==== tests/cases/conformance/types/rest/genericRestParameters1.ts (2 errors) ====
|
||||
declare let f1: (...x: [number, string, boolean]) => void;
|
||||
declare let f2: (x0: number, x1: string, x2: boolean) => void;
|
||||
|
||||
f1 = f2;
|
||||
f2 = f1;
|
||||
|
||||
declare const t3: [number, string, boolean];
|
||||
declare const t2: [string, boolean];
|
||||
declare const t1: [boolean];
|
||||
declare const t0: [];
|
||||
|
||||
declare const ns: [number, string];
|
||||
declare const sn: [string, number];
|
||||
|
||||
f1(42, "hello", true);
|
||||
f1(t3[0], t3[1], t3[2]);
|
||||
f1(...t3);
|
||||
f1(42, ...t2);
|
||||
f1(42, "hello", ...t1);
|
||||
f1(42, "hello", true, ...t0);
|
||||
f1(ns[0], ns[1], true);
|
||||
f1(...ns, true); // Error, tuple spread only expanded when last
|
||||
~~~~~~~~~~~~~~~
|
||||
!!! error TS2556: Expected 3 arguments, but got 1 or more.
|
||||
|
||||
f2(42, "hello", true);
|
||||
f2(t3[0], t3[1], t3[2]);
|
||||
f2(...t3);
|
||||
f2(42, ...t2);
|
||||
f2(42, "hello", ...t1);
|
||||
f2(42, "hello", true, ...t0);
|
||||
f2(ns[0], ns[1], true);
|
||||
f2(...ns, true); // Error, tuple spread only expanded when last
|
||||
~~~~~~~~~~~~~~~
|
||||
!!! error TS2556: Expected 3 arguments, but got 1 or more.
|
||||
|
||||
declare function f10<T extends unknown[]>(...args: T): T;
|
||||
|
||||
const x10 = f10(42, "hello", true); // [number, string, boolean]
|
||||
const x11 = f10(42, "hello"); // [number, string]
|
||||
const x12 = f10(42); // [number]
|
||||
const x13 = f10(); // []
|
||||
const x14 = f10(...t3); // [number, string, boolean]
|
||||
const x15 = f10(42, ...t2); // [number, string, boolean]
|
||||
const x16 = f10(42, "hello", ...t1); // [number, string, boolean]
|
||||
const x17 = f10(42, "hello", true, ...t0); // [number, string, boolean]
|
||||
const x18 = f10(...ns, true); // (string | number | boolean)[]
|
||||
|
||||
function g10<U extends string[], V extends [number, number]>(u: U, v: V) {
|
||||
let x1 = f10(...u); // U
|
||||
let x2 = f10(...v); // V
|
||||
let x3 = f10(1, ...u); // [number, ...string[]]
|
||||
let x4 = f10(...u, ...v); // (string | number)[]
|
||||
}
|
||||
|
||||
declare function f11<T extends (string | number | boolean)[]>(...args: T): T;
|
||||
|
||||
const z10 = f11(42, "hello", true); // [42, "hello", true]
|
||||
const z11 = f11(42, "hello"); // [42, "hello"]
|
||||
const z12 = f11(42); // [42]
|
||||
const z13 = f11(); // []
|
||||
const z14 = f11(...t3); // [number, string, boolean]
|
||||
const z15 = f11(42, ...t2); // [42, string, boolean]
|
||||
const z16 = f11(42, "hello", ...t1); // [42, "hello", boolean]
|
||||
const z17 = f11(42, "hello", true, ...t0); // [42, "hello", true]
|
||||
const z18 = f11(...ns, true); // (string | number | true)[]
|
||||
|
||||
function g11<U extends string[], V extends [number, number]>(u: U, v: V) {
|
||||
let x1 = f11(...u); // U
|
||||
let x2 = f11(...v); // V
|
||||
let x3 = f11(1, ...u); // [1, ...string[]]
|
||||
let x4 = f11(...u, ...v); // (string | number)[]
|
||||
}
|
||||
|
||||
function call<T extends unknown[], U>(f: (...args: T) => U, ...args: T) {
|
||||
return f(...args);
|
||||
}
|
||||
|
||||
function callr<T extends unknown[], U>(args: T, f: (...args: T) => U) {
|
||||
return f(...args);
|
||||
}
|
||||
|
||||
declare function f15(a: string, b: number): string | number;
|
||||
declare function f16<A, B>(a: A, b: B): A | B;
|
||||
|
||||
let x20 = call((x, y) => x + y, 10, 20); // number
|
||||
let x21 = call((x, y) => x + y, 10, "hello"); // string
|
||||
let x22 = call(f15, "hello", 42); // string | number
|
||||
let x23 = call(f16, "hello", 42); // unknown
|
||||
let x24 = call<[string, number], string | number>(f16, "hello", 42); // string | number
|
||||
|
||||
let x30 = callr(sn, (x, y) => x + y); // string
|
||||
let x31 = callr(sn, f15); // string | number
|
||||
let x32 = callr(sn, f16); // string | number
|
||||
|
||||
function bind<T, U extends unknown[], V>(f: (x: T, ...rest: U) => V, x: T) {
|
||||
return (...rest: U) => f(x, ...rest);
|
||||
}
|
||||
|
||||
declare const f20: (x: number, y: string, z: boolean) => string[];
|
||||
|
||||
const f21 = bind(f20, 42); // (y: string, z: boolean) => string[]
|
||||
const f22 = bind(f21, "hello"); // (z: boolean) => string[]
|
||||
const f23 = bind(f22, true); // () => string[]
|
||||
|
||||
f20(42, "hello", true);
|
||||
f21("hello", true);
|
||||
f22(true);
|
||||
f23();
|
||||
|
||||
declare const g20: (x: number, y?: string, z?: boolean) => string[];
|
||||
|
||||
const g21 = bind(g20, 42); // (y: string, z: boolean) => string[]
|
||||
const g22 = bind(g21, "hello"); // (z: boolean) => string[]
|
||||
const g23 = bind(g22, true); // () => string[]
|
||||
|
||||
g20(42, "hello", true);
|
||||
g20(42, "hello");
|
||||
g20(42);
|
||||
g21("hello", true);
|
||||
g21("hello");
|
||||
g21();
|
||||
g22(true);
|
||||
g22();
|
||||
g23();
|
||||
|
||||
declare function f30<T, U extends ((x: T) => any)[]>(x: T, ...args: U): U;
|
||||
|
||||
const c30 = f30(42, x => "" + x, x => x + 1); // [(x: number) => string, (x: number) => number]
|
||||
|
||||
type Parameters<T extends Function> = T extends ((...args: infer U) => any) | (new(...args: infer U) => any) ? U : any[];
|
||||
|
||||
type T01 = Parameters<(x: number, y: string, z: boolean) => void>;
|
||||
type T02 = Parameters<(...args: [number, string, boolean]) => void>;
|
||||
type T03 = Parameters<new (x: number, y: string, z: boolean) => void>;
|
||||
type T04 = Parameters<new (...args: [number, string, boolean]) => void>;
|
||||
type T05<T> = Parameters<(...args: T[]) => void>;
|
||||
type T06<T> = Parameters<new (...args: []) => void>;
|
||||
type T07<T extends any[]> = Parameters<(...args: T) => void>;
|
||||
type T08<T extends any[]> = Parameters<new (...args: T) => void>;
|
||||
type T09 = Parameters<Function>;
|
||||
|
||||
type Record1 = {
|
||||
move: [number, 'left' | 'right'];
|
||||
jump: [number, 'up' | 'down'];
|
||||
stop: string;
|
||||
done: [];
|
||||
}
|
||||
|
||||
type EventType<T> = {
|
||||
emit<K extends keyof T = keyof T>(e: K, ...payload: T[K] extends any[] ? T[K] : [T[K]]): void;
|
||||
}
|
||||
|
||||
declare var events: EventType<Record1>;
|
||||
events.emit('move', 10, 'left');
|
||||
events.emit('jump', 20, 'up');
|
||||
events.emit('stop', 'Bye!');
|
||||
events.emit('done');
|
||||
|
||||
@@ -0,0 +1,334 @@
|
||||
//// [genericRestParameters1.ts]
|
||||
declare let f1: (...x: [number, string, boolean]) => void;
|
||||
declare let f2: (x0: number, x1: string, x2: boolean) => void;
|
||||
|
||||
f1 = f2;
|
||||
f2 = f1;
|
||||
|
||||
declare const t3: [number, string, boolean];
|
||||
declare const t2: [string, boolean];
|
||||
declare const t1: [boolean];
|
||||
declare const t0: [];
|
||||
|
||||
declare const ns: [number, string];
|
||||
declare const sn: [string, number];
|
||||
|
||||
f1(42, "hello", true);
|
||||
f1(t3[0], t3[1], t3[2]);
|
||||
f1(...t3);
|
||||
f1(42, ...t2);
|
||||
f1(42, "hello", ...t1);
|
||||
f1(42, "hello", true, ...t0);
|
||||
f1(ns[0], ns[1], true);
|
||||
f1(...ns, true); // Error, tuple spread only expanded when last
|
||||
|
||||
f2(42, "hello", true);
|
||||
f2(t3[0], t3[1], t3[2]);
|
||||
f2(...t3);
|
||||
f2(42, ...t2);
|
||||
f2(42, "hello", ...t1);
|
||||
f2(42, "hello", true, ...t0);
|
||||
f2(ns[0], ns[1], true);
|
||||
f2(...ns, true); // Error, tuple spread only expanded when last
|
||||
|
||||
declare function f10<T extends unknown[]>(...args: T): T;
|
||||
|
||||
const x10 = f10(42, "hello", true); // [number, string, boolean]
|
||||
const x11 = f10(42, "hello"); // [number, string]
|
||||
const x12 = f10(42); // [number]
|
||||
const x13 = f10(); // []
|
||||
const x14 = f10(...t3); // [number, string, boolean]
|
||||
const x15 = f10(42, ...t2); // [number, string, boolean]
|
||||
const x16 = f10(42, "hello", ...t1); // [number, string, boolean]
|
||||
const x17 = f10(42, "hello", true, ...t0); // [number, string, boolean]
|
||||
const x18 = f10(...ns, true); // (string | number | boolean)[]
|
||||
|
||||
function g10<U extends string[], V extends [number, number]>(u: U, v: V) {
|
||||
let x1 = f10(...u); // U
|
||||
let x2 = f10(...v); // V
|
||||
let x3 = f10(1, ...u); // [number, ...string[]]
|
||||
let x4 = f10(...u, ...v); // (string | number)[]
|
||||
}
|
||||
|
||||
declare function f11<T extends (string | number | boolean)[]>(...args: T): T;
|
||||
|
||||
const z10 = f11(42, "hello", true); // [42, "hello", true]
|
||||
const z11 = f11(42, "hello"); // [42, "hello"]
|
||||
const z12 = f11(42); // [42]
|
||||
const z13 = f11(); // []
|
||||
const z14 = f11(...t3); // [number, string, boolean]
|
||||
const z15 = f11(42, ...t2); // [42, string, boolean]
|
||||
const z16 = f11(42, "hello", ...t1); // [42, "hello", boolean]
|
||||
const z17 = f11(42, "hello", true, ...t0); // [42, "hello", true]
|
||||
const z18 = f11(...ns, true); // (string | number | true)[]
|
||||
|
||||
function g11<U extends string[], V extends [number, number]>(u: U, v: V) {
|
||||
let x1 = f11(...u); // U
|
||||
let x2 = f11(...v); // V
|
||||
let x3 = f11(1, ...u); // [1, ...string[]]
|
||||
let x4 = f11(...u, ...v); // (string | number)[]
|
||||
}
|
||||
|
||||
function call<T extends unknown[], U>(f: (...args: T) => U, ...args: T) {
|
||||
return f(...args);
|
||||
}
|
||||
|
||||
function callr<T extends unknown[], U>(args: T, f: (...args: T) => U) {
|
||||
return f(...args);
|
||||
}
|
||||
|
||||
declare function f15(a: string, b: number): string | number;
|
||||
declare function f16<A, B>(a: A, b: B): A | B;
|
||||
|
||||
let x20 = call((x, y) => x + y, 10, 20); // number
|
||||
let x21 = call((x, y) => x + y, 10, "hello"); // string
|
||||
let x22 = call(f15, "hello", 42); // string | number
|
||||
let x23 = call(f16, "hello", 42); // unknown
|
||||
let x24 = call<[string, number], string | number>(f16, "hello", 42); // string | number
|
||||
|
||||
let x30 = callr(sn, (x, y) => x + y); // string
|
||||
let x31 = callr(sn, f15); // string | number
|
||||
let x32 = callr(sn, f16); // string | number
|
||||
|
||||
function bind<T, U extends unknown[], V>(f: (x: T, ...rest: U) => V, x: T) {
|
||||
return (...rest: U) => f(x, ...rest);
|
||||
}
|
||||
|
||||
declare const f20: (x: number, y: string, z: boolean) => string[];
|
||||
|
||||
const f21 = bind(f20, 42); // (y: string, z: boolean) => string[]
|
||||
const f22 = bind(f21, "hello"); // (z: boolean) => string[]
|
||||
const f23 = bind(f22, true); // () => string[]
|
||||
|
||||
f20(42, "hello", true);
|
||||
f21("hello", true);
|
||||
f22(true);
|
||||
f23();
|
||||
|
||||
declare const g20: (x: number, y?: string, z?: boolean) => string[];
|
||||
|
||||
const g21 = bind(g20, 42); // (y: string, z: boolean) => string[]
|
||||
const g22 = bind(g21, "hello"); // (z: boolean) => string[]
|
||||
const g23 = bind(g22, true); // () => string[]
|
||||
|
||||
g20(42, "hello", true);
|
||||
g20(42, "hello");
|
||||
g20(42);
|
||||
g21("hello", true);
|
||||
g21("hello");
|
||||
g21();
|
||||
g22(true);
|
||||
g22();
|
||||
g23();
|
||||
|
||||
declare function f30<T, U extends ((x: T) => any)[]>(x: T, ...args: U): U;
|
||||
|
||||
const c30 = f30(42, x => "" + x, x => x + 1); // [(x: number) => string, (x: number) => number]
|
||||
|
||||
type Parameters<T extends Function> = T extends ((...args: infer U) => any) | (new(...args: infer U) => any) ? U : any[];
|
||||
|
||||
type T01 = Parameters<(x: number, y: string, z: boolean) => void>;
|
||||
type T02 = Parameters<(...args: [number, string, boolean]) => void>;
|
||||
type T03 = Parameters<new (x: number, y: string, z: boolean) => void>;
|
||||
type T04 = Parameters<new (...args: [number, string, boolean]) => void>;
|
||||
type T05<T> = Parameters<(...args: T[]) => void>;
|
||||
type T06<T> = Parameters<new (...args: []) => void>;
|
||||
type T07<T extends any[]> = Parameters<(...args: T) => void>;
|
||||
type T08<T extends any[]> = Parameters<new (...args: T) => void>;
|
||||
type T09 = Parameters<Function>;
|
||||
|
||||
type Record1 = {
|
||||
move: [number, 'left' | 'right'];
|
||||
jump: [number, 'up' | 'down'];
|
||||
stop: string;
|
||||
done: [];
|
||||
}
|
||||
|
||||
type EventType<T> = {
|
||||
emit<K extends keyof T = keyof T>(e: K, ...payload: T[K] extends any[] ? T[K] : [T[K]]): void;
|
||||
}
|
||||
|
||||
declare var events: EventType<Record1>;
|
||||
events.emit('move', 10, 'left');
|
||||
events.emit('jump', 20, 'up');
|
||||
events.emit('stop', 'Bye!');
|
||||
events.emit('done');
|
||||
|
||||
|
||||
//// [genericRestParameters1.js]
|
||||
"use strict";
|
||||
f1 = f2;
|
||||
f2 = f1;
|
||||
f1(42, "hello", true);
|
||||
f1(t3[0], t3[1], t3[2]);
|
||||
f1.apply(void 0, t3);
|
||||
f1.apply(void 0, [42].concat(t2));
|
||||
f1.apply(void 0, [42, "hello"].concat(t1));
|
||||
f1.apply(void 0, [42, "hello", true].concat(t0));
|
||||
f1(ns[0], ns[1], true);
|
||||
f1.apply(void 0, ns.concat([true])); // Error, tuple spread only expanded when last
|
||||
f2(42, "hello", true);
|
||||
f2(t3[0], t3[1], t3[2]);
|
||||
f2.apply(void 0, t3);
|
||||
f2.apply(void 0, [42].concat(t2));
|
||||
f2.apply(void 0, [42, "hello"].concat(t1));
|
||||
f2.apply(void 0, [42, "hello", true].concat(t0));
|
||||
f2(ns[0], ns[1], true);
|
||||
f2.apply(void 0, ns.concat([true])); // Error, tuple spread only expanded when last
|
||||
var x10 = f10(42, "hello", true); // [number, string, boolean]
|
||||
var x11 = f10(42, "hello"); // [number, string]
|
||||
var x12 = f10(42); // [number]
|
||||
var x13 = f10(); // []
|
||||
var x14 = f10.apply(void 0, t3); // [number, string, boolean]
|
||||
var x15 = f10.apply(void 0, [42].concat(t2)); // [number, string, boolean]
|
||||
var x16 = f10.apply(void 0, [42, "hello"].concat(t1)); // [number, string, boolean]
|
||||
var x17 = f10.apply(void 0, [42, "hello", true].concat(t0)); // [number, string, boolean]
|
||||
var x18 = f10.apply(void 0, ns.concat([true])); // (string | number | boolean)[]
|
||||
function g10(u, v) {
|
||||
var x1 = f10.apply(void 0, u); // U
|
||||
var x2 = f10.apply(void 0, v); // V
|
||||
var x3 = f10.apply(void 0, [1].concat(u)); // [number, ...string[]]
|
||||
var x4 = f10.apply(void 0, u.concat(v)); // (string | number)[]
|
||||
}
|
||||
var z10 = f11(42, "hello", true); // [42, "hello", true]
|
||||
var z11 = f11(42, "hello"); // [42, "hello"]
|
||||
var z12 = f11(42); // [42]
|
||||
var z13 = f11(); // []
|
||||
var z14 = f11.apply(void 0, t3); // [number, string, boolean]
|
||||
var z15 = f11.apply(void 0, [42].concat(t2)); // [42, string, boolean]
|
||||
var z16 = f11.apply(void 0, [42, "hello"].concat(t1)); // [42, "hello", boolean]
|
||||
var z17 = f11.apply(void 0, [42, "hello", true].concat(t0)); // [42, "hello", true]
|
||||
var z18 = f11.apply(void 0, ns.concat([true])); // (string | number | true)[]
|
||||
function g11(u, v) {
|
||||
var x1 = f11.apply(void 0, u); // U
|
||||
var x2 = f11.apply(void 0, v); // V
|
||||
var x3 = f11.apply(void 0, [1].concat(u)); // [1, ...string[]]
|
||||
var x4 = f11.apply(void 0, u.concat(v)); // (string | number)[]
|
||||
}
|
||||
function call(f) {
|
||||
var args = [];
|
||||
for (var _i = 1; _i < arguments.length; _i++) {
|
||||
args[_i - 1] = arguments[_i];
|
||||
}
|
||||
return f.apply(void 0, args);
|
||||
}
|
||||
function callr(args, f) {
|
||||
return f.apply(void 0, args);
|
||||
}
|
||||
var x20 = call(function (x, y) { return x + y; }, 10, 20); // number
|
||||
var x21 = call(function (x, y) { return x + y; }, 10, "hello"); // string
|
||||
var x22 = call(f15, "hello", 42); // string | number
|
||||
var x23 = call(f16, "hello", 42); // unknown
|
||||
var x24 = call(f16, "hello", 42); // string | number
|
||||
var x30 = callr(sn, function (x, y) { return x + y; }); // string
|
||||
var x31 = callr(sn, f15); // string | number
|
||||
var x32 = callr(sn, f16); // string | number
|
||||
function bind(f, x) {
|
||||
return function () {
|
||||
var rest = [];
|
||||
for (var _i = 0; _i < arguments.length; _i++) {
|
||||
rest[_i] = arguments[_i];
|
||||
}
|
||||
return f.apply(void 0, [x].concat(rest));
|
||||
};
|
||||
}
|
||||
var f21 = bind(f20, 42); // (y: string, z: boolean) => string[]
|
||||
var f22 = bind(f21, "hello"); // (z: boolean) => string[]
|
||||
var f23 = bind(f22, true); // () => string[]
|
||||
f20(42, "hello", true);
|
||||
f21("hello", true);
|
||||
f22(true);
|
||||
f23();
|
||||
var g21 = bind(g20, 42); // (y: string, z: boolean) => string[]
|
||||
var g22 = bind(g21, "hello"); // (z: boolean) => string[]
|
||||
var g23 = bind(g22, true); // () => string[]
|
||||
g20(42, "hello", true);
|
||||
g20(42, "hello");
|
||||
g20(42);
|
||||
g21("hello", true);
|
||||
g21("hello");
|
||||
g21();
|
||||
g22(true);
|
||||
g22();
|
||||
g23();
|
||||
var c30 = f30(42, function (x) { return "" + x; }, function (x) { return x + 1; }); // [(x: number) => string, (x: number) => number]
|
||||
events.emit('move', 10, 'left');
|
||||
events.emit('jump', 20, 'up');
|
||||
events.emit('stop', 'Bye!');
|
||||
events.emit('done');
|
||||
|
||||
|
||||
//// [genericRestParameters1.d.ts]
|
||||
declare let f1: (...x: [number, string, boolean]) => void;
|
||||
declare let f2: (x0: number, x1: string, x2: boolean) => void;
|
||||
declare const t3: [number, string, boolean];
|
||||
declare const t2: [string, boolean];
|
||||
declare const t1: [boolean];
|
||||
declare const t0: [];
|
||||
declare const ns: [number, string];
|
||||
declare const sn: [string, number];
|
||||
declare function f10<T extends unknown[]>(...args: T): T;
|
||||
declare const x10: [number, string, boolean];
|
||||
declare const x11: [number, string];
|
||||
declare const x12: [number];
|
||||
declare const x13: [];
|
||||
declare const x14: [number, string, boolean];
|
||||
declare const x15: [number, string, boolean];
|
||||
declare const x16: [number, string, boolean];
|
||||
declare const x17: [number, string, boolean];
|
||||
declare const x18: (string | number | boolean)[];
|
||||
declare function g10<U extends string[], V extends [number, number]>(u: U, v: V): void;
|
||||
declare function f11<T extends (string | number | boolean)[]>(...args: T): T;
|
||||
declare const z10: [42, "hello", true];
|
||||
declare const z11: [42, "hello"];
|
||||
declare const z12: [42];
|
||||
declare const z13: [];
|
||||
declare const z14: [number, string, boolean];
|
||||
declare const z15: [42, string, boolean];
|
||||
declare const z16: [42, "hello", boolean];
|
||||
declare const z17: [42, "hello", true];
|
||||
declare const z18: (string | number | true)[];
|
||||
declare function g11<U extends string[], V extends [number, number]>(u: U, v: V): void;
|
||||
declare function call<T extends unknown[], U>(f: (...args: T) => U, ...args: T): U;
|
||||
declare function callr<T extends unknown[], U>(args: T, f: (...args: T) => U): U;
|
||||
declare function f15(a: string, b: number): string | number;
|
||||
declare function f16<A, B>(a: A, b: B): A | B;
|
||||
declare let x20: number;
|
||||
declare let x21: string;
|
||||
declare let x22: string | number;
|
||||
declare let x23: unknown;
|
||||
declare let x24: string | number;
|
||||
declare let x30: string;
|
||||
declare let x31: string | number;
|
||||
declare let x32: string | number;
|
||||
declare function bind<T, U extends unknown[], V>(f: (x: T, ...rest: U) => V, x: T): (...rest: U) => V;
|
||||
declare const f20: (x: number, y: string, z: boolean) => string[];
|
||||
declare const f21: (y: string, z: boolean) => string[];
|
||||
declare const f22: (z: boolean) => string[];
|
||||
declare const f23: () => string[];
|
||||
declare const g20: (x: number, y?: string, z?: boolean) => string[];
|
||||
declare const g21: (y?: string | undefined, z?: boolean | undefined) => string[];
|
||||
declare const g22: (z?: boolean | undefined) => string[];
|
||||
declare const g23: () => string[];
|
||||
declare function f30<T, U extends ((x: T) => any)[]>(x: T, ...args: U): U;
|
||||
declare const c30: [(x: number) => string, (x: number) => number];
|
||||
declare type Parameters<T extends Function> = T extends ((...args: infer U) => any) | (new (...args: infer U) => any) ? U : any[];
|
||||
declare type T01 = Parameters<(x: number, y: string, z: boolean) => void>;
|
||||
declare type T02 = Parameters<(...args: [number, string, boolean]) => void>;
|
||||
declare type T03 = Parameters<new (x: number, y: string, z: boolean) => void>;
|
||||
declare type T04 = Parameters<new (...args: [number, string, boolean]) => void>;
|
||||
declare type T05<T> = Parameters<(...args: T[]) => void>;
|
||||
declare type T06<T> = Parameters<new (...args: []) => void>;
|
||||
declare type T07<T extends any[]> = Parameters<(...args: T) => void>;
|
||||
declare type T08<T extends any[]> = Parameters<new (...args: T) => void>;
|
||||
declare type T09 = Parameters<Function>;
|
||||
declare type Record1 = {
|
||||
move: [number, 'left' | 'right'];
|
||||
jump: [number, 'up' | 'down'];
|
||||
stop: string;
|
||||
done: [];
|
||||
};
|
||||
declare type EventType<T> = {
|
||||
emit<K extends keyof T = keyof T>(e: K, ...payload: T[K] extends any[] ? T[K] : [T[K]]): void;
|
||||
};
|
||||
declare var events: EventType<Record1>;
|
||||
@@ -0,0 +1,624 @@
|
||||
=== tests/cases/conformance/types/rest/genericRestParameters1.ts ===
|
||||
declare let f1: (...x: [number, string, boolean]) => void;
|
||||
>f1 : Symbol(f1, Decl(genericRestParameters1.ts, 0, 11))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 0, 17))
|
||||
|
||||
declare let f2: (x0: number, x1: string, x2: boolean) => void;
|
||||
>f2 : Symbol(f2, Decl(genericRestParameters1.ts, 1, 11))
|
||||
>x0 : Symbol(x0, Decl(genericRestParameters1.ts, 1, 17))
|
||||
>x1 : Symbol(x1, Decl(genericRestParameters1.ts, 1, 28))
|
||||
>x2 : Symbol(x2, Decl(genericRestParameters1.ts, 1, 40))
|
||||
|
||||
f1 = f2;
|
||||
>f1 : Symbol(f1, Decl(genericRestParameters1.ts, 0, 11))
|
||||
>f2 : Symbol(f2, Decl(genericRestParameters1.ts, 1, 11))
|
||||
|
||||
f2 = f1;
|
||||
>f2 : Symbol(f2, Decl(genericRestParameters1.ts, 1, 11))
|
||||
>f1 : Symbol(f1, Decl(genericRestParameters1.ts, 0, 11))
|
||||
|
||||
declare const t3: [number, string, boolean];
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters1.ts, 6, 13))
|
||||
|
||||
declare const t2: [string, boolean];
|
||||
>t2 : Symbol(t2, Decl(genericRestParameters1.ts, 7, 13))
|
||||
|
||||
declare const t1: [boolean];
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters1.ts, 8, 13))
|
||||
|
||||
declare const t0: [];
|
||||
>t0 : Symbol(t0, Decl(genericRestParameters1.ts, 9, 13))
|
||||
|
||||
declare const ns: [number, string];
|
||||
>ns : Symbol(ns, Decl(genericRestParameters1.ts, 11, 13))
|
||||
|
||||
declare const sn: [string, number];
|
||||
>sn : Symbol(sn, Decl(genericRestParameters1.ts, 12, 13))
|
||||
|
||||
f1(42, "hello", true);
|
||||
>f1 : Symbol(f1, Decl(genericRestParameters1.ts, 0, 11))
|
||||
|
||||
f1(t3[0], t3[1], t3[2]);
|
||||
>f1 : Symbol(f1, Decl(genericRestParameters1.ts, 0, 11))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters1.ts, 6, 13))
|
||||
>0 : Symbol(0)
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters1.ts, 6, 13))
|
||||
>1 : Symbol(1)
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters1.ts, 6, 13))
|
||||
>2 : Symbol(2)
|
||||
|
||||
f1(...t3);
|
||||
>f1 : Symbol(f1, Decl(genericRestParameters1.ts, 0, 11))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters1.ts, 6, 13))
|
||||
|
||||
f1(42, ...t2);
|
||||
>f1 : Symbol(f1, Decl(genericRestParameters1.ts, 0, 11))
|
||||
>t2 : Symbol(t2, Decl(genericRestParameters1.ts, 7, 13))
|
||||
|
||||
f1(42, "hello", ...t1);
|
||||
>f1 : Symbol(f1, Decl(genericRestParameters1.ts, 0, 11))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters1.ts, 8, 13))
|
||||
|
||||
f1(42, "hello", true, ...t0);
|
||||
>f1 : Symbol(f1, Decl(genericRestParameters1.ts, 0, 11))
|
||||
>t0 : Symbol(t0, Decl(genericRestParameters1.ts, 9, 13))
|
||||
|
||||
f1(ns[0], ns[1], true);
|
||||
>f1 : Symbol(f1, Decl(genericRestParameters1.ts, 0, 11))
|
||||
>ns : Symbol(ns, Decl(genericRestParameters1.ts, 11, 13))
|
||||
>0 : Symbol(0)
|
||||
>ns : Symbol(ns, Decl(genericRestParameters1.ts, 11, 13))
|
||||
>1 : Symbol(1)
|
||||
|
||||
f1(...ns, true); // Error, tuple spread only expanded when last
|
||||
>f1 : Symbol(f1, Decl(genericRestParameters1.ts, 0, 11))
|
||||
>ns : Symbol(ns, Decl(genericRestParameters1.ts, 11, 13))
|
||||
|
||||
f2(42, "hello", true);
|
||||
>f2 : Symbol(f2, Decl(genericRestParameters1.ts, 1, 11))
|
||||
|
||||
f2(t3[0], t3[1], t3[2]);
|
||||
>f2 : Symbol(f2, Decl(genericRestParameters1.ts, 1, 11))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters1.ts, 6, 13))
|
||||
>0 : Symbol(0)
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters1.ts, 6, 13))
|
||||
>1 : Symbol(1)
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters1.ts, 6, 13))
|
||||
>2 : Symbol(2)
|
||||
|
||||
f2(...t3);
|
||||
>f2 : Symbol(f2, Decl(genericRestParameters1.ts, 1, 11))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters1.ts, 6, 13))
|
||||
|
||||
f2(42, ...t2);
|
||||
>f2 : Symbol(f2, Decl(genericRestParameters1.ts, 1, 11))
|
||||
>t2 : Symbol(t2, Decl(genericRestParameters1.ts, 7, 13))
|
||||
|
||||
f2(42, "hello", ...t1);
|
||||
>f2 : Symbol(f2, Decl(genericRestParameters1.ts, 1, 11))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters1.ts, 8, 13))
|
||||
|
||||
f2(42, "hello", true, ...t0);
|
||||
>f2 : Symbol(f2, Decl(genericRestParameters1.ts, 1, 11))
|
||||
>t0 : Symbol(t0, Decl(genericRestParameters1.ts, 9, 13))
|
||||
|
||||
f2(ns[0], ns[1], true);
|
||||
>f2 : Symbol(f2, Decl(genericRestParameters1.ts, 1, 11))
|
||||
>ns : Symbol(ns, Decl(genericRestParameters1.ts, 11, 13))
|
||||
>0 : Symbol(0)
|
||||
>ns : Symbol(ns, Decl(genericRestParameters1.ts, 11, 13))
|
||||
>1 : Symbol(1)
|
||||
|
||||
f2(...ns, true); // Error, tuple spread only expanded when last
|
||||
>f2 : Symbol(f2, Decl(genericRestParameters1.ts, 1, 11))
|
||||
>ns : Symbol(ns, Decl(genericRestParameters1.ts, 11, 13))
|
||||
|
||||
declare function f10<T extends unknown[]>(...args: T): T;
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 32, 21))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 32, 42))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 32, 21))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 32, 21))
|
||||
|
||||
const x10 = f10(42, "hello", true); // [number, string, boolean]
|
||||
>x10 : Symbol(x10, Decl(genericRestParameters1.ts, 34, 5))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
|
||||
const x11 = f10(42, "hello"); // [number, string]
|
||||
>x11 : Symbol(x11, Decl(genericRestParameters1.ts, 35, 5))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
|
||||
const x12 = f10(42); // [number]
|
||||
>x12 : Symbol(x12, Decl(genericRestParameters1.ts, 36, 5))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
|
||||
const x13 = f10(); // []
|
||||
>x13 : Symbol(x13, Decl(genericRestParameters1.ts, 37, 5))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
|
||||
const x14 = f10(...t3); // [number, string, boolean]
|
||||
>x14 : Symbol(x14, Decl(genericRestParameters1.ts, 38, 5))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters1.ts, 6, 13))
|
||||
|
||||
const x15 = f10(42, ...t2); // [number, string, boolean]
|
||||
>x15 : Symbol(x15, Decl(genericRestParameters1.ts, 39, 5))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
>t2 : Symbol(t2, Decl(genericRestParameters1.ts, 7, 13))
|
||||
|
||||
const x16 = f10(42, "hello", ...t1); // [number, string, boolean]
|
||||
>x16 : Symbol(x16, Decl(genericRestParameters1.ts, 40, 5))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters1.ts, 8, 13))
|
||||
|
||||
const x17 = f10(42, "hello", true, ...t0); // [number, string, boolean]
|
||||
>x17 : Symbol(x17, Decl(genericRestParameters1.ts, 41, 5))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
>t0 : Symbol(t0, Decl(genericRestParameters1.ts, 9, 13))
|
||||
|
||||
const x18 = f10(...ns, true); // (string | number | boolean)[]
|
||||
>x18 : Symbol(x18, Decl(genericRestParameters1.ts, 42, 5))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
>ns : Symbol(ns, Decl(genericRestParameters1.ts, 11, 13))
|
||||
|
||||
function g10<U extends string[], V extends [number, number]>(u: U, v: V) {
|
||||
>g10 : Symbol(g10, Decl(genericRestParameters1.ts, 42, 29))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 44, 13))
|
||||
>V : Symbol(V, Decl(genericRestParameters1.ts, 44, 32))
|
||||
>u : Symbol(u, Decl(genericRestParameters1.ts, 44, 61))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 44, 13))
|
||||
>v : Symbol(v, Decl(genericRestParameters1.ts, 44, 66))
|
||||
>V : Symbol(V, Decl(genericRestParameters1.ts, 44, 32))
|
||||
|
||||
let x1 = f10(...u); // U
|
||||
>x1 : Symbol(x1, Decl(genericRestParameters1.ts, 45, 7))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
>u : Symbol(u, Decl(genericRestParameters1.ts, 44, 61))
|
||||
|
||||
let x2 = f10(...v); // V
|
||||
>x2 : Symbol(x2, Decl(genericRestParameters1.ts, 46, 7))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
>v : Symbol(v, Decl(genericRestParameters1.ts, 44, 66))
|
||||
|
||||
let x3 = f10(1, ...u); // [number, ...string[]]
|
||||
>x3 : Symbol(x3, Decl(genericRestParameters1.ts, 47, 7))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
>u : Symbol(u, Decl(genericRestParameters1.ts, 44, 61))
|
||||
|
||||
let x4 = f10(...u, ...v); // (string | number)[]
|
||||
>x4 : Symbol(x4, Decl(genericRestParameters1.ts, 48, 7))
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters1.ts, 30, 16))
|
||||
>u : Symbol(u, Decl(genericRestParameters1.ts, 44, 61))
|
||||
>v : Symbol(v, Decl(genericRestParameters1.ts, 44, 66))
|
||||
}
|
||||
|
||||
declare function f11<T extends (string | number | boolean)[]>(...args: T): T;
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 51, 21))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 51, 62))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 51, 21))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 51, 21))
|
||||
|
||||
const z10 = f11(42, "hello", true); // [42, "hello", true]
|
||||
>z10 : Symbol(z10, Decl(genericRestParameters1.ts, 53, 5))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
|
||||
const z11 = f11(42, "hello"); // [42, "hello"]
|
||||
>z11 : Symbol(z11, Decl(genericRestParameters1.ts, 54, 5))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
|
||||
const z12 = f11(42); // [42]
|
||||
>z12 : Symbol(z12, Decl(genericRestParameters1.ts, 55, 5))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
|
||||
const z13 = f11(); // []
|
||||
>z13 : Symbol(z13, Decl(genericRestParameters1.ts, 56, 5))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
|
||||
const z14 = f11(...t3); // [number, string, boolean]
|
||||
>z14 : Symbol(z14, Decl(genericRestParameters1.ts, 57, 5))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters1.ts, 6, 13))
|
||||
|
||||
const z15 = f11(42, ...t2); // [42, string, boolean]
|
||||
>z15 : Symbol(z15, Decl(genericRestParameters1.ts, 58, 5))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
>t2 : Symbol(t2, Decl(genericRestParameters1.ts, 7, 13))
|
||||
|
||||
const z16 = f11(42, "hello", ...t1); // [42, "hello", boolean]
|
||||
>z16 : Symbol(z16, Decl(genericRestParameters1.ts, 59, 5))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters1.ts, 8, 13))
|
||||
|
||||
const z17 = f11(42, "hello", true, ...t0); // [42, "hello", true]
|
||||
>z17 : Symbol(z17, Decl(genericRestParameters1.ts, 60, 5))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
>t0 : Symbol(t0, Decl(genericRestParameters1.ts, 9, 13))
|
||||
|
||||
const z18 = f11(...ns, true); // (string | number | true)[]
|
||||
>z18 : Symbol(z18, Decl(genericRestParameters1.ts, 61, 5))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
>ns : Symbol(ns, Decl(genericRestParameters1.ts, 11, 13))
|
||||
|
||||
function g11<U extends string[], V extends [number, number]>(u: U, v: V) {
|
||||
>g11 : Symbol(g11, Decl(genericRestParameters1.ts, 61, 29))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 63, 13))
|
||||
>V : Symbol(V, Decl(genericRestParameters1.ts, 63, 32))
|
||||
>u : Symbol(u, Decl(genericRestParameters1.ts, 63, 61))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 63, 13))
|
||||
>v : Symbol(v, Decl(genericRestParameters1.ts, 63, 66))
|
||||
>V : Symbol(V, Decl(genericRestParameters1.ts, 63, 32))
|
||||
|
||||
let x1 = f11(...u); // U
|
||||
>x1 : Symbol(x1, Decl(genericRestParameters1.ts, 64, 7))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
>u : Symbol(u, Decl(genericRestParameters1.ts, 63, 61))
|
||||
|
||||
let x2 = f11(...v); // V
|
||||
>x2 : Symbol(x2, Decl(genericRestParameters1.ts, 65, 7))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
>v : Symbol(v, Decl(genericRestParameters1.ts, 63, 66))
|
||||
|
||||
let x3 = f11(1, ...u); // [1, ...string[]]
|
||||
>x3 : Symbol(x3, Decl(genericRestParameters1.ts, 66, 7))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
>u : Symbol(u, Decl(genericRestParameters1.ts, 63, 61))
|
||||
|
||||
let x4 = f11(...u, ...v); // (string | number)[]
|
||||
>x4 : Symbol(x4, Decl(genericRestParameters1.ts, 67, 7))
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters1.ts, 49, 1))
|
||||
>u : Symbol(u, Decl(genericRestParameters1.ts, 63, 61))
|
||||
>v : Symbol(v, Decl(genericRestParameters1.ts, 63, 66))
|
||||
}
|
||||
|
||||
function call<T extends unknown[], U>(f: (...args: T) => U, ...args: T) {
|
||||
>call : Symbol(call, Decl(genericRestParameters1.ts, 68, 1))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 70, 14))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 70, 34))
|
||||
>f : Symbol(f, Decl(genericRestParameters1.ts, 70, 38))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 70, 42))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 70, 14))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 70, 34))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 70, 59))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 70, 14))
|
||||
|
||||
return f(...args);
|
||||
>f : Symbol(f, Decl(genericRestParameters1.ts, 70, 38))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 70, 59))
|
||||
}
|
||||
|
||||
function callr<T extends unknown[], U>(args: T, f: (...args: T) => U) {
|
||||
>callr : Symbol(callr, Decl(genericRestParameters1.ts, 72, 1))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 74, 15))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 74, 35))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 74, 39))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 74, 15))
|
||||
>f : Symbol(f, Decl(genericRestParameters1.ts, 74, 47))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 74, 52))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 74, 15))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 74, 35))
|
||||
|
||||
return f(...args);
|
||||
>f : Symbol(f, Decl(genericRestParameters1.ts, 74, 47))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 74, 39))
|
||||
}
|
||||
|
||||
declare function f15(a: string, b: number): string | number;
|
||||
>f15 : Symbol(f15, Decl(genericRestParameters1.ts, 76, 1))
|
||||
>a : Symbol(a, Decl(genericRestParameters1.ts, 78, 21))
|
||||
>b : Symbol(b, Decl(genericRestParameters1.ts, 78, 31))
|
||||
|
||||
declare function f16<A, B>(a: A, b: B): A | B;
|
||||
>f16 : Symbol(f16, Decl(genericRestParameters1.ts, 78, 60))
|
||||
>A : Symbol(A, Decl(genericRestParameters1.ts, 79, 21))
|
||||
>B : Symbol(B, Decl(genericRestParameters1.ts, 79, 23))
|
||||
>a : Symbol(a, Decl(genericRestParameters1.ts, 79, 27))
|
||||
>A : Symbol(A, Decl(genericRestParameters1.ts, 79, 21))
|
||||
>b : Symbol(b, Decl(genericRestParameters1.ts, 79, 32))
|
||||
>B : Symbol(B, Decl(genericRestParameters1.ts, 79, 23))
|
||||
>A : Symbol(A, Decl(genericRestParameters1.ts, 79, 21))
|
||||
>B : Symbol(B, Decl(genericRestParameters1.ts, 79, 23))
|
||||
|
||||
let x20 = call((x, y) => x + y, 10, 20); // number
|
||||
>x20 : Symbol(x20, Decl(genericRestParameters1.ts, 81, 3))
|
||||
>call : Symbol(call, Decl(genericRestParameters1.ts, 68, 1))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 81, 16))
|
||||
>y : Symbol(y, Decl(genericRestParameters1.ts, 81, 18))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 81, 16))
|
||||
>y : Symbol(y, Decl(genericRestParameters1.ts, 81, 18))
|
||||
|
||||
let x21 = call((x, y) => x + y, 10, "hello"); // string
|
||||
>x21 : Symbol(x21, Decl(genericRestParameters1.ts, 82, 3))
|
||||
>call : Symbol(call, Decl(genericRestParameters1.ts, 68, 1))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 82, 16))
|
||||
>y : Symbol(y, Decl(genericRestParameters1.ts, 82, 18))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 82, 16))
|
||||
>y : Symbol(y, Decl(genericRestParameters1.ts, 82, 18))
|
||||
|
||||
let x22 = call(f15, "hello", 42); // string | number
|
||||
>x22 : Symbol(x22, Decl(genericRestParameters1.ts, 83, 3))
|
||||
>call : Symbol(call, Decl(genericRestParameters1.ts, 68, 1))
|
||||
>f15 : Symbol(f15, Decl(genericRestParameters1.ts, 76, 1))
|
||||
|
||||
let x23 = call(f16, "hello", 42); // unknown
|
||||
>x23 : Symbol(x23, Decl(genericRestParameters1.ts, 84, 3))
|
||||
>call : Symbol(call, Decl(genericRestParameters1.ts, 68, 1))
|
||||
>f16 : Symbol(f16, Decl(genericRestParameters1.ts, 78, 60))
|
||||
|
||||
let x24 = call<[string, number], string | number>(f16, "hello", 42); // string | number
|
||||
>x24 : Symbol(x24, Decl(genericRestParameters1.ts, 85, 3))
|
||||
>call : Symbol(call, Decl(genericRestParameters1.ts, 68, 1))
|
||||
>f16 : Symbol(f16, Decl(genericRestParameters1.ts, 78, 60))
|
||||
|
||||
let x30 = callr(sn, (x, y) => x + y); // string
|
||||
>x30 : Symbol(x30, Decl(genericRestParameters1.ts, 87, 3))
|
||||
>callr : Symbol(callr, Decl(genericRestParameters1.ts, 72, 1))
|
||||
>sn : Symbol(sn, Decl(genericRestParameters1.ts, 12, 13))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 87, 21))
|
||||
>y : Symbol(y, Decl(genericRestParameters1.ts, 87, 23))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 87, 21))
|
||||
>y : Symbol(y, Decl(genericRestParameters1.ts, 87, 23))
|
||||
|
||||
let x31 = callr(sn, f15); // string | number
|
||||
>x31 : Symbol(x31, Decl(genericRestParameters1.ts, 88, 3))
|
||||
>callr : Symbol(callr, Decl(genericRestParameters1.ts, 72, 1))
|
||||
>sn : Symbol(sn, Decl(genericRestParameters1.ts, 12, 13))
|
||||
>f15 : Symbol(f15, Decl(genericRestParameters1.ts, 76, 1))
|
||||
|
||||
let x32 = callr(sn, f16); // string | number
|
||||
>x32 : Symbol(x32, Decl(genericRestParameters1.ts, 89, 3))
|
||||
>callr : Symbol(callr, Decl(genericRestParameters1.ts, 72, 1))
|
||||
>sn : Symbol(sn, Decl(genericRestParameters1.ts, 12, 13))
|
||||
>f16 : Symbol(f16, Decl(genericRestParameters1.ts, 78, 60))
|
||||
|
||||
function bind<T, U extends unknown[], V>(f: (x: T, ...rest: U) => V, x: T) {
|
||||
>bind : Symbol(bind, Decl(genericRestParameters1.ts, 89, 25))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 91, 14))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 91, 16))
|
||||
>V : Symbol(V, Decl(genericRestParameters1.ts, 91, 37))
|
||||
>f : Symbol(f, Decl(genericRestParameters1.ts, 91, 41))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 91, 45))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 91, 14))
|
||||
>rest : Symbol(rest, Decl(genericRestParameters1.ts, 91, 50))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 91, 16))
|
||||
>V : Symbol(V, Decl(genericRestParameters1.ts, 91, 37))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 91, 68))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 91, 14))
|
||||
|
||||
return (...rest: U) => f(x, ...rest);
|
||||
>rest : Symbol(rest, Decl(genericRestParameters1.ts, 92, 12))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 91, 16))
|
||||
>f : Symbol(f, Decl(genericRestParameters1.ts, 91, 41))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 91, 68))
|
||||
>rest : Symbol(rest, Decl(genericRestParameters1.ts, 92, 12))
|
||||
}
|
||||
|
||||
declare const f20: (x: number, y: string, z: boolean) => string[];
|
||||
>f20 : Symbol(f20, Decl(genericRestParameters1.ts, 95, 13))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 95, 20))
|
||||
>y : Symbol(y, Decl(genericRestParameters1.ts, 95, 30))
|
||||
>z : Symbol(z, Decl(genericRestParameters1.ts, 95, 41))
|
||||
|
||||
const f21 = bind(f20, 42); // (y: string, z: boolean) => string[]
|
||||
>f21 : Symbol(f21, Decl(genericRestParameters1.ts, 97, 5))
|
||||
>bind : Symbol(bind, Decl(genericRestParameters1.ts, 89, 25))
|
||||
>f20 : Symbol(f20, Decl(genericRestParameters1.ts, 95, 13))
|
||||
|
||||
const f22 = bind(f21, "hello"); // (z: boolean) => string[]
|
||||
>f22 : Symbol(f22, Decl(genericRestParameters1.ts, 98, 5))
|
||||
>bind : Symbol(bind, Decl(genericRestParameters1.ts, 89, 25))
|
||||
>f21 : Symbol(f21, Decl(genericRestParameters1.ts, 97, 5))
|
||||
|
||||
const f23 = bind(f22, true); // () => string[]
|
||||
>f23 : Symbol(f23, Decl(genericRestParameters1.ts, 99, 5))
|
||||
>bind : Symbol(bind, Decl(genericRestParameters1.ts, 89, 25))
|
||||
>f22 : Symbol(f22, Decl(genericRestParameters1.ts, 98, 5))
|
||||
|
||||
f20(42, "hello", true);
|
||||
>f20 : Symbol(f20, Decl(genericRestParameters1.ts, 95, 13))
|
||||
|
||||
f21("hello", true);
|
||||
>f21 : Symbol(f21, Decl(genericRestParameters1.ts, 97, 5))
|
||||
|
||||
f22(true);
|
||||
>f22 : Symbol(f22, Decl(genericRestParameters1.ts, 98, 5))
|
||||
|
||||
f23();
|
||||
>f23 : Symbol(f23, Decl(genericRestParameters1.ts, 99, 5))
|
||||
|
||||
declare const g20: (x: number, y?: string, z?: boolean) => string[];
|
||||
>g20 : Symbol(g20, Decl(genericRestParameters1.ts, 106, 13))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 106, 20))
|
||||
>y : Symbol(y, Decl(genericRestParameters1.ts, 106, 30))
|
||||
>z : Symbol(z, Decl(genericRestParameters1.ts, 106, 42))
|
||||
|
||||
const g21 = bind(g20, 42); // (y: string, z: boolean) => string[]
|
||||
>g21 : Symbol(g21, Decl(genericRestParameters1.ts, 108, 5))
|
||||
>bind : Symbol(bind, Decl(genericRestParameters1.ts, 89, 25))
|
||||
>g20 : Symbol(g20, Decl(genericRestParameters1.ts, 106, 13))
|
||||
|
||||
const g22 = bind(g21, "hello"); // (z: boolean) => string[]
|
||||
>g22 : Symbol(g22, Decl(genericRestParameters1.ts, 109, 5))
|
||||
>bind : Symbol(bind, Decl(genericRestParameters1.ts, 89, 25))
|
||||
>g21 : Symbol(g21, Decl(genericRestParameters1.ts, 108, 5))
|
||||
|
||||
const g23 = bind(g22, true); // () => string[]
|
||||
>g23 : Symbol(g23, Decl(genericRestParameters1.ts, 110, 5))
|
||||
>bind : Symbol(bind, Decl(genericRestParameters1.ts, 89, 25))
|
||||
>g22 : Symbol(g22, Decl(genericRestParameters1.ts, 109, 5))
|
||||
|
||||
g20(42, "hello", true);
|
||||
>g20 : Symbol(g20, Decl(genericRestParameters1.ts, 106, 13))
|
||||
|
||||
g20(42, "hello");
|
||||
>g20 : Symbol(g20, Decl(genericRestParameters1.ts, 106, 13))
|
||||
|
||||
g20(42);
|
||||
>g20 : Symbol(g20, Decl(genericRestParameters1.ts, 106, 13))
|
||||
|
||||
g21("hello", true);
|
||||
>g21 : Symbol(g21, Decl(genericRestParameters1.ts, 108, 5))
|
||||
|
||||
g21("hello");
|
||||
>g21 : Symbol(g21, Decl(genericRestParameters1.ts, 108, 5))
|
||||
|
||||
g21();
|
||||
>g21 : Symbol(g21, Decl(genericRestParameters1.ts, 108, 5))
|
||||
|
||||
g22(true);
|
||||
>g22 : Symbol(g22, Decl(genericRestParameters1.ts, 109, 5))
|
||||
|
||||
g22();
|
||||
>g22 : Symbol(g22, Decl(genericRestParameters1.ts, 109, 5))
|
||||
|
||||
g23();
|
||||
>g23 : Symbol(g23, Decl(genericRestParameters1.ts, 110, 5))
|
||||
|
||||
declare function f30<T, U extends ((x: T) => any)[]>(x: T, ...args: U): U;
|
||||
>f30 : Symbol(f30, Decl(genericRestParameters1.ts, 120, 6))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 122, 21))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 122, 23))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 122, 36))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 122, 21))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 122, 53))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 122, 21))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 122, 58))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 122, 23))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 122, 23))
|
||||
|
||||
const c30 = f30(42, x => "" + x, x => x + 1); // [(x: number) => string, (x: number) => number]
|
||||
>c30 : Symbol(c30, Decl(genericRestParameters1.ts, 124, 5))
|
||||
>f30 : Symbol(f30, Decl(genericRestParameters1.ts, 120, 6))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 124, 19))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 124, 19))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 124, 32))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 124, 32))
|
||||
|
||||
type Parameters<T extends Function> = T extends ((...args: infer U) => any) | (new(...args: infer U) => any) ? U : any[];
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters1.ts, 124, 45))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 126, 16))
|
||||
>Function : Symbol(Function, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 126, 16))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 126, 50))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 126, 64), Decl(genericRestParameters1.ts, 126, 97))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 126, 83))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 126, 64), Decl(genericRestParameters1.ts, 126, 97))
|
||||
>U : Symbol(U, Decl(genericRestParameters1.ts, 126, 64), Decl(genericRestParameters1.ts, 126, 97))
|
||||
|
||||
type T01 = Parameters<(x: number, y: string, z: boolean) => void>;
|
||||
>T01 : Symbol(T01, Decl(genericRestParameters1.ts, 126, 121))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters1.ts, 124, 45))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 128, 23))
|
||||
>y : Symbol(y, Decl(genericRestParameters1.ts, 128, 33))
|
||||
>z : Symbol(z, Decl(genericRestParameters1.ts, 128, 44))
|
||||
|
||||
type T02 = Parameters<(...args: [number, string, boolean]) => void>;
|
||||
>T02 : Symbol(T02, Decl(genericRestParameters1.ts, 128, 66))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters1.ts, 124, 45))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 129, 23))
|
||||
|
||||
type T03 = Parameters<new (x: number, y: string, z: boolean) => void>;
|
||||
>T03 : Symbol(T03, Decl(genericRestParameters1.ts, 129, 68))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters1.ts, 124, 45))
|
||||
>x : Symbol(x, Decl(genericRestParameters1.ts, 130, 27))
|
||||
>y : Symbol(y, Decl(genericRestParameters1.ts, 130, 37))
|
||||
>z : Symbol(z, Decl(genericRestParameters1.ts, 130, 48))
|
||||
|
||||
type T04 = Parameters<new (...args: [number, string, boolean]) => void>;
|
||||
>T04 : Symbol(T04, Decl(genericRestParameters1.ts, 130, 70))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters1.ts, 124, 45))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 131, 27))
|
||||
|
||||
type T05<T> = Parameters<(...args: T[]) => void>;
|
||||
>T05 : Symbol(T05, Decl(genericRestParameters1.ts, 131, 72))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 132, 9))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters1.ts, 124, 45))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 132, 26))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 132, 9))
|
||||
|
||||
type T06<T> = Parameters<new (...args: []) => void>;
|
||||
>T06 : Symbol(T06, Decl(genericRestParameters1.ts, 132, 49))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 133, 9))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters1.ts, 124, 45))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 133, 30))
|
||||
|
||||
type T07<T extends any[]> = Parameters<(...args: T) => void>;
|
||||
>T07 : Symbol(T07, Decl(genericRestParameters1.ts, 133, 52))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 134, 9))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters1.ts, 124, 45))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 134, 40))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 134, 9))
|
||||
|
||||
type T08<T extends any[]> = Parameters<new (...args: T) => void>;
|
||||
>T08 : Symbol(T08, Decl(genericRestParameters1.ts, 134, 61))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 135, 9))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters1.ts, 124, 45))
|
||||
>args : Symbol(args, Decl(genericRestParameters1.ts, 135, 44))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 135, 9))
|
||||
|
||||
type T09 = Parameters<Function>;
|
||||
>T09 : Symbol(T09, Decl(genericRestParameters1.ts, 135, 65))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters1.ts, 124, 45))
|
||||
>Function : Symbol(Function, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
|
||||
type Record1 = {
|
||||
>Record1 : Symbol(Record1, Decl(genericRestParameters1.ts, 136, 32))
|
||||
|
||||
move: [number, 'left' | 'right'];
|
||||
>move : Symbol(move, Decl(genericRestParameters1.ts, 138, 16))
|
||||
|
||||
jump: [number, 'up' | 'down'];
|
||||
>jump : Symbol(jump, Decl(genericRestParameters1.ts, 139, 35))
|
||||
|
||||
stop: string;
|
||||
>stop : Symbol(stop, Decl(genericRestParameters1.ts, 140, 32))
|
||||
|
||||
done: [];
|
||||
>done : Symbol(done, Decl(genericRestParameters1.ts, 141, 15))
|
||||
}
|
||||
|
||||
type EventType<T> = {
|
||||
>EventType : Symbol(EventType, Decl(genericRestParameters1.ts, 143, 1))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 145, 15))
|
||||
|
||||
emit<K extends keyof T = keyof T>(e: K, ...payload: T[K] extends any[] ? T[K] : [T[K]]): void;
|
||||
>emit : Symbol(emit, Decl(genericRestParameters1.ts, 145, 21))
|
||||
>K : Symbol(K, Decl(genericRestParameters1.ts, 146, 7))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 145, 15))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 145, 15))
|
||||
>e : Symbol(e, Decl(genericRestParameters1.ts, 146, 36))
|
||||
>K : Symbol(K, Decl(genericRestParameters1.ts, 146, 7))
|
||||
>payload : Symbol(payload, Decl(genericRestParameters1.ts, 146, 41))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 145, 15))
|
||||
>K : Symbol(K, Decl(genericRestParameters1.ts, 146, 7))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 145, 15))
|
||||
>K : Symbol(K, Decl(genericRestParameters1.ts, 146, 7))
|
||||
>T : Symbol(T, Decl(genericRestParameters1.ts, 145, 15))
|
||||
>K : Symbol(K, Decl(genericRestParameters1.ts, 146, 7))
|
||||
}
|
||||
|
||||
declare var events: EventType<Record1>;
|
||||
>events : Symbol(events, Decl(genericRestParameters1.ts, 149, 11))
|
||||
>EventType : Symbol(EventType, Decl(genericRestParameters1.ts, 143, 1))
|
||||
>Record1 : Symbol(Record1, Decl(genericRestParameters1.ts, 136, 32))
|
||||
|
||||
events.emit('move', 10, 'left');
|
||||
>events.emit : Symbol(emit, Decl(genericRestParameters1.ts, 145, 21))
|
||||
>events : Symbol(events, Decl(genericRestParameters1.ts, 149, 11))
|
||||
>emit : Symbol(emit, Decl(genericRestParameters1.ts, 145, 21))
|
||||
|
||||
events.emit('jump', 20, 'up');
|
||||
>events.emit : Symbol(emit, Decl(genericRestParameters1.ts, 145, 21))
|
||||
>events : Symbol(events, Decl(genericRestParameters1.ts, 149, 11))
|
||||
>emit : Symbol(emit, Decl(genericRestParameters1.ts, 145, 21))
|
||||
|
||||
events.emit('stop', 'Bye!');
|
||||
>events.emit : Symbol(emit, Decl(genericRestParameters1.ts, 145, 21))
|
||||
>events : Symbol(events, Decl(genericRestParameters1.ts, 149, 11))
|
||||
>emit : Symbol(emit, Decl(genericRestParameters1.ts, 145, 21))
|
||||
|
||||
events.emit('done');
|
||||
>events.emit : Symbol(emit, Decl(genericRestParameters1.ts, 145, 21))
|
||||
>events : Symbol(events, Decl(genericRestParameters1.ts, 149, 11))
|
||||
>emit : Symbol(emit, Decl(genericRestParameters1.ts, 145, 21))
|
||||
|
||||
@@ -0,0 +1,851 @@
|
||||
=== tests/cases/conformance/types/rest/genericRestParameters1.ts ===
|
||||
declare let f1: (...x: [number, string, boolean]) => void;
|
||||
>f1 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
>x : [number, string, boolean]
|
||||
|
||||
declare let f2: (x0: number, x1: string, x2: boolean) => void;
|
||||
>f2 : (x0: number, x1: string, x2: boolean) => void
|
||||
>x0 : number
|
||||
>x1 : string
|
||||
>x2 : boolean
|
||||
|
||||
f1 = f2;
|
||||
>f1 = f2 : (x0: number, x1: string, x2: boolean) => void
|
||||
>f1 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
>f2 : (x0: number, x1: string, x2: boolean) => void
|
||||
|
||||
f2 = f1;
|
||||
>f2 = f1 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
>f2 : (x0: number, x1: string, x2: boolean) => void
|
||||
>f1 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
|
||||
declare const t3: [number, string, boolean];
|
||||
>t3 : [number, string, boolean]
|
||||
|
||||
declare const t2: [string, boolean];
|
||||
>t2 : [string, boolean]
|
||||
|
||||
declare const t1: [boolean];
|
||||
>t1 : [boolean]
|
||||
|
||||
declare const t0: [];
|
||||
>t0 : []
|
||||
|
||||
declare const ns: [number, string];
|
||||
>ns : [number, string]
|
||||
|
||||
declare const sn: [string, number];
|
||||
>sn : [string, number]
|
||||
|
||||
f1(42, "hello", true);
|
||||
>f1(42, "hello", true) : void
|
||||
>f1 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
f1(t3[0], t3[1], t3[2]);
|
||||
>f1(t3[0], t3[1], t3[2]) : void
|
||||
>f1 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
>t3[0] : number
|
||||
>t3 : [number, string, boolean]
|
||||
>0 : 0
|
||||
>t3[1] : string
|
||||
>t3 : [number, string, boolean]
|
||||
>1 : 1
|
||||
>t3[2] : boolean
|
||||
>t3 : [number, string, boolean]
|
||||
>2 : 2
|
||||
|
||||
f1(...t3);
|
||||
>f1(...t3) : void
|
||||
>f1 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
>...t3 : string | number | boolean
|
||||
>t3 : [number, string, boolean]
|
||||
|
||||
f1(42, ...t2);
|
||||
>f1(42, ...t2) : void
|
||||
>f1 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
>42 : 42
|
||||
>...t2 : string | boolean
|
||||
>t2 : [string, boolean]
|
||||
|
||||
f1(42, "hello", ...t1);
|
||||
>f1(42, "hello", ...t1) : void
|
||||
>f1 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>...t1 : boolean
|
||||
>t1 : [boolean]
|
||||
|
||||
f1(42, "hello", true, ...t0);
|
||||
>f1(42, "hello", true, ...t0) : void
|
||||
>f1 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>...t0 : never
|
||||
>t0 : []
|
||||
|
||||
f1(ns[0], ns[1], true);
|
||||
>f1(ns[0], ns[1], true) : void
|
||||
>f1 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
>ns[0] : number
|
||||
>ns : [number, string]
|
||||
>0 : 0
|
||||
>ns[1] : string
|
||||
>ns : [number, string]
|
||||
>1 : 1
|
||||
>true : true
|
||||
|
||||
f1(...ns, true); // Error, tuple spread only expanded when last
|
||||
>f1(...ns, true) : void
|
||||
>f1 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
>...ns : string | number
|
||||
>ns : [number, string]
|
||||
>true : true
|
||||
|
||||
f2(42, "hello", true);
|
||||
>f2(42, "hello", true) : void
|
||||
>f2 : (x0: number, x1: string, x2: boolean) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
f2(t3[0], t3[1], t3[2]);
|
||||
>f2(t3[0], t3[1], t3[2]) : void
|
||||
>f2 : (x0: number, x1: string, x2: boolean) => void
|
||||
>t3[0] : number
|
||||
>t3 : [number, string, boolean]
|
||||
>0 : 0
|
||||
>t3[1] : string
|
||||
>t3 : [number, string, boolean]
|
||||
>1 : 1
|
||||
>t3[2] : boolean
|
||||
>t3 : [number, string, boolean]
|
||||
>2 : 2
|
||||
|
||||
f2(...t3);
|
||||
>f2(...t3) : void
|
||||
>f2 : (x0: number, x1: string, x2: boolean) => void
|
||||
>...t3 : string | number | boolean
|
||||
>t3 : [number, string, boolean]
|
||||
|
||||
f2(42, ...t2);
|
||||
>f2(42, ...t2) : void
|
||||
>f2 : (x0: number, x1: string, x2: boolean) => void
|
||||
>42 : 42
|
||||
>...t2 : string | boolean
|
||||
>t2 : [string, boolean]
|
||||
|
||||
f2(42, "hello", ...t1);
|
||||
>f2(42, "hello", ...t1) : void
|
||||
>f2 : (x0: number, x1: string, x2: boolean) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>...t1 : boolean
|
||||
>t1 : [boolean]
|
||||
|
||||
f2(42, "hello", true, ...t0);
|
||||
>f2(42, "hello", true, ...t0) : void
|
||||
>f2 : (x0: number, x1: string, x2: boolean) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>...t0 : never
|
||||
>t0 : []
|
||||
|
||||
f2(ns[0], ns[1], true);
|
||||
>f2(ns[0], ns[1], true) : void
|
||||
>f2 : (x0: number, x1: string, x2: boolean) => void
|
||||
>ns[0] : number
|
||||
>ns : [number, string]
|
||||
>0 : 0
|
||||
>ns[1] : string
|
||||
>ns : [number, string]
|
||||
>1 : 1
|
||||
>true : true
|
||||
|
||||
f2(...ns, true); // Error, tuple spread only expanded when last
|
||||
>f2(...ns, true) : void
|
||||
>f2 : (x0: number, x1: string, x2: boolean) => void
|
||||
>...ns : string | number
|
||||
>ns : [number, string]
|
||||
>true : true
|
||||
|
||||
declare function f10<T extends unknown[]>(...args: T): T;
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>T : T
|
||||
>args : T
|
||||
>T : T
|
||||
>T : T
|
||||
|
||||
const x10 = f10(42, "hello", true); // [number, string, boolean]
|
||||
>x10 : [number, string, boolean]
|
||||
>f10(42, "hello", true) : [number, string, boolean]
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
const x11 = f10(42, "hello"); // [number, string]
|
||||
>x11 : [number, string]
|
||||
>f10(42, "hello") : [number, string]
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
|
||||
const x12 = f10(42); // [number]
|
||||
>x12 : [number]
|
||||
>f10(42) : [number]
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>42 : 42
|
||||
|
||||
const x13 = f10(); // []
|
||||
>x13 : []
|
||||
>f10() : []
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
|
||||
const x14 = f10(...t3); // [number, string, boolean]
|
||||
>x14 : [number, string, boolean]
|
||||
>f10(...t3) : [number, string, boolean]
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>...t3 : string | number | boolean
|
||||
>t3 : [number, string, boolean]
|
||||
|
||||
const x15 = f10(42, ...t2); // [number, string, boolean]
|
||||
>x15 : [number, string, boolean]
|
||||
>f10(42, ...t2) : [number, string, boolean]
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>...t2 : string | boolean
|
||||
>t2 : [string, boolean]
|
||||
|
||||
const x16 = f10(42, "hello", ...t1); // [number, string, boolean]
|
||||
>x16 : [number, string, boolean]
|
||||
>f10(42, "hello", ...t1) : [number, string, boolean]
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>...t1 : boolean
|
||||
>t1 : [boolean]
|
||||
|
||||
const x17 = f10(42, "hello", true, ...t0); // [number, string, boolean]
|
||||
>x17 : [number, string, boolean]
|
||||
>f10(42, "hello", true, ...t0) : [number, string, boolean]
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>...t0 : never
|
||||
>t0 : []
|
||||
|
||||
const x18 = f10(...ns, true); // (string | number | boolean)[]
|
||||
>x18 : (string | number | boolean)[]
|
||||
>f10(...ns, true) : (string | number | boolean)[]
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>...ns : string | number
|
||||
>ns : [number, string]
|
||||
>true : true
|
||||
|
||||
function g10<U extends string[], V extends [number, number]>(u: U, v: V) {
|
||||
>g10 : <U extends string[], V extends [number, number]>(u: U, v: V) => void
|
||||
>U : U
|
||||
>V : V
|
||||
>u : U
|
||||
>U : U
|
||||
>v : V
|
||||
>V : V
|
||||
|
||||
let x1 = f10(...u); // U
|
||||
>x1 : U
|
||||
>f10(...u) : U
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>...u : string
|
||||
>u : U
|
||||
|
||||
let x2 = f10(...v); // V
|
||||
>x2 : V
|
||||
>f10(...v) : V
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>...v : number
|
||||
>v : V
|
||||
|
||||
let x3 = f10(1, ...u); // [number, ...string[]]
|
||||
>x3 : [number, ...string[]]
|
||||
>f10(1, ...u) : [number, ...string[]]
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>1 : 1
|
||||
>...u : string
|
||||
>u : U
|
||||
|
||||
let x4 = f10(...u, ...v); // (string | number)[]
|
||||
>x4 : (string | number)[]
|
||||
>f10(...u, ...v) : (string | number)[]
|
||||
>f10 : <T extends unknown[]>(...args: T) => T
|
||||
>...u : string
|
||||
>u : U
|
||||
>...v : number
|
||||
>v : V
|
||||
}
|
||||
|
||||
declare function f11<T extends (string | number | boolean)[]>(...args: T): T;
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>T : T
|
||||
>args : T
|
||||
>T : T
|
||||
>T : T
|
||||
|
||||
const z10 = f11(42, "hello", true); // [42, "hello", true]
|
||||
>z10 : [42, "hello", true]
|
||||
>f11(42, "hello", true) : [42, "hello", true]
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
const z11 = f11(42, "hello"); // [42, "hello"]
|
||||
>z11 : [42, "hello"]
|
||||
>f11(42, "hello") : [42, "hello"]
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
|
||||
const z12 = f11(42); // [42]
|
||||
>z12 : [42]
|
||||
>f11(42) : [42]
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>42 : 42
|
||||
|
||||
const z13 = f11(); // []
|
||||
>z13 : []
|
||||
>f11() : []
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
|
||||
const z14 = f11(...t3); // [number, string, boolean]
|
||||
>z14 : [number, string, boolean]
|
||||
>f11(...t3) : [number, string, boolean]
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>...t3 : string | number | boolean
|
||||
>t3 : [number, string, boolean]
|
||||
|
||||
const z15 = f11(42, ...t2); // [42, string, boolean]
|
||||
>z15 : [42, string, boolean]
|
||||
>f11(42, ...t2) : [42, string, boolean]
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>...t2 : string | boolean
|
||||
>t2 : [string, boolean]
|
||||
|
||||
const z16 = f11(42, "hello", ...t1); // [42, "hello", boolean]
|
||||
>z16 : [42, "hello", boolean]
|
||||
>f11(42, "hello", ...t1) : [42, "hello", boolean]
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>...t1 : boolean
|
||||
>t1 : [boolean]
|
||||
|
||||
const z17 = f11(42, "hello", true, ...t0); // [42, "hello", true]
|
||||
>z17 : [42, "hello", true]
|
||||
>f11(42, "hello", true, ...t0) : [42, "hello", true]
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>...t0 : never
|
||||
>t0 : []
|
||||
|
||||
const z18 = f11(...ns, true); // (string | number | true)[]
|
||||
>z18 : (string | number | true)[]
|
||||
>f11(...ns, true) : (string | number | true)[]
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>...ns : string | number
|
||||
>ns : [number, string]
|
||||
>true : true
|
||||
|
||||
function g11<U extends string[], V extends [number, number]>(u: U, v: V) {
|
||||
>g11 : <U extends string[], V extends [number, number]>(u: U, v: V) => void
|
||||
>U : U
|
||||
>V : V
|
||||
>u : U
|
||||
>U : U
|
||||
>v : V
|
||||
>V : V
|
||||
|
||||
let x1 = f11(...u); // U
|
||||
>x1 : U
|
||||
>f11(...u) : U
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>...u : string
|
||||
>u : U
|
||||
|
||||
let x2 = f11(...v); // V
|
||||
>x2 : V
|
||||
>f11(...v) : V
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>...v : number
|
||||
>v : V
|
||||
|
||||
let x3 = f11(1, ...u); // [1, ...string[]]
|
||||
>x3 : [1, ...string[]]
|
||||
>f11(1, ...u) : [1, ...string[]]
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>1 : 1
|
||||
>...u : string
|
||||
>u : U
|
||||
|
||||
let x4 = f11(...u, ...v); // (string | number)[]
|
||||
>x4 : (string | number)[]
|
||||
>f11(...u, ...v) : (string | number)[]
|
||||
>f11 : <T extends (string | number | boolean)[]>(...args: T) => T
|
||||
>...u : string
|
||||
>u : U
|
||||
>...v : number
|
||||
>v : V
|
||||
}
|
||||
|
||||
function call<T extends unknown[], U>(f: (...args: T) => U, ...args: T) {
|
||||
>call : <T extends unknown[], U>(f: (...args: T) => U, ...args: T) => U
|
||||
>T : T
|
||||
>U : U
|
||||
>f : (...args: T) => U
|
||||
>args : T
|
||||
>T : T
|
||||
>U : U
|
||||
>args : T
|
||||
>T : T
|
||||
|
||||
return f(...args);
|
||||
>f(...args) : U
|
||||
>f : (...args: T) => U
|
||||
>...args : unknown
|
||||
>args : T
|
||||
}
|
||||
|
||||
function callr<T extends unknown[], U>(args: T, f: (...args: T) => U) {
|
||||
>callr : <T extends unknown[], U>(args: T, f: (...args: T) => U) => U
|
||||
>T : T
|
||||
>U : U
|
||||
>args : T
|
||||
>T : T
|
||||
>f : (...args: T) => U
|
||||
>args : T
|
||||
>T : T
|
||||
>U : U
|
||||
|
||||
return f(...args);
|
||||
>f(...args) : U
|
||||
>f : (...args: T) => U
|
||||
>...args : unknown
|
||||
>args : T
|
||||
}
|
||||
|
||||
declare function f15(a: string, b: number): string | number;
|
||||
>f15 : (a: string, b: number) => string | number
|
||||
>a : string
|
||||
>b : number
|
||||
|
||||
declare function f16<A, B>(a: A, b: B): A | B;
|
||||
>f16 : <A, B>(a: A, b: B) => A | B
|
||||
>A : A
|
||||
>B : B
|
||||
>a : A
|
||||
>A : A
|
||||
>b : B
|
||||
>B : B
|
||||
>A : A
|
||||
>B : B
|
||||
|
||||
let x20 = call((x, y) => x + y, 10, 20); // number
|
||||
>x20 : number
|
||||
>call((x, y) => x + y, 10, 20) : number
|
||||
>call : <T extends unknown[], U>(f: (...args: T) => U, ...args: T) => U
|
||||
>(x, y) => x + y : (x: number, y: number) => number
|
||||
>x : number
|
||||
>y : number
|
||||
>x + y : number
|
||||
>x : number
|
||||
>y : number
|
||||
>10 : 10
|
||||
>20 : 20
|
||||
|
||||
let x21 = call((x, y) => x + y, 10, "hello"); // string
|
||||
>x21 : string
|
||||
>call((x, y) => x + y, 10, "hello") : string
|
||||
>call : <T extends unknown[], U>(f: (...args: T) => U, ...args: T) => U
|
||||
>(x, y) => x + y : (x: number, y: string) => string
|
||||
>x : number
|
||||
>y : string
|
||||
>x + y : string
|
||||
>x : number
|
||||
>y : string
|
||||
>10 : 10
|
||||
>"hello" : "hello"
|
||||
|
||||
let x22 = call(f15, "hello", 42); // string | number
|
||||
>x22 : string | number
|
||||
>call(f15, "hello", 42) : string | number
|
||||
>call : <T extends unknown[], U>(f: (...args: T) => U, ...args: T) => U
|
||||
>f15 : (a: string, b: number) => string | number
|
||||
>"hello" : "hello"
|
||||
>42 : 42
|
||||
|
||||
let x23 = call(f16, "hello", 42); // unknown
|
||||
>x23 : unknown
|
||||
>call(f16, "hello", 42) : unknown
|
||||
>call : <T extends unknown[], U>(f: (...args: T) => U, ...args: T) => U
|
||||
>f16 : <A, B>(a: A, b: B) => A | B
|
||||
>"hello" : "hello"
|
||||
>42 : 42
|
||||
|
||||
let x24 = call<[string, number], string | number>(f16, "hello", 42); // string | number
|
||||
>x24 : string | number
|
||||
>call<[string, number], string | number>(f16, "hello", 42) : string | number
|
||||
>call : <T extends unknown[], U>(f: (...args: T) => U, ...args: T) => U
|
||||
>f16 : <A, B>(a: A, b: B) => A | B
|
||||
>"hello" : "hello"
|
||||
>42 : 42
|
||||
|
||||
let x30 = callr(sn, (x, y) => x + y); // string
|
||||
>x30 : string
|
||||
>callr(sn, (x, y) => x + y) : string
|
||||
>callr : <T extends unknown[], U>(args: T, f: (...args: T) => U) => U
|
||||
>sn : [string, number]
|
||||
>(x, y) => x + y : (x: string, y: number) => string
|
||||
>x : string
|
||||
>y : number
|
||||
>x + y : string
|
||||
>x : string
|
||||
>y : number
|
||||
|
||||
let x31 = callr(sn, f15); // string | number
|
||||
>x31 : string | number
|
||||
>callr(sn, f15) : string | number
|
||||
>callr : <T extends unknown[], U>(args: T, f: (...args: T) => U) => U
|
||||
>sn : [string, number]
|
||||
>f15 : (a: string, b: number) => string | number
|
||||
|
||||
let x32 = callr(sn, f16); // string | number
|
||||
>x32 : string | number
|
||||
>callr(sn, f16) : string | number
|
||||
>callr : <T extends unknown[], U>(args: T, f: (...args: T) => U) => U
|
||||
>sn : [string, number]
|
||||
>f16 : <A, B>(a: A, b: B) => A | B
|
||||
|
||||
function bind<T, U extends unknown[], V>(f: (x: T, ...rest: U) => V, x: T) {
|
||||
>bind : <T, U extends unknown[], V>(f: (x: T, ...rest: U) => V, x: T) => (...rest: U) => V
|
||||
>T : T
|
||||
>U : U
|
||||
>V : V
|
||||
>f : (x: T, ...rest: U) => V
|
||||
>x : T
|
||||
>T : T
|
||||
>rest : U
|
||||
>U : U
|
||||
>V : V
|
||||
>x : T
|
||||
>T : T
|
||||
|
||||
return (...rest: U) => f(x, ...rest);
|
||||
>(...rest: U) => f(x, ...rest) : (...rest: U) => V
|
||||
>rest : U
|
||||
>U : U
|
||||
>f(x, ...rest) : V
|
||||
>f : (x: T, ...rest: U) => V
|
||||
>x : T
|
||||
>...rest : unknown
|
||||
>rest : U
|
||||
}
|
||||
|
||||
declare const f20: (x: number, y: string, z: boolean) => string[];
|
||||
>f20 : (x: number, y: string, z: boolean) => string[]
|
||||
>x : number
|
||||
>y : string
|
||||
>z : boolean
|
||||
|
||||
const f21 = bind(f20, 42); // (y: string, z: boolean) => string[]
|
||||
>f21 : (y: string, z: boolean) => string[]
|
||||
>bind(f20, 42) : (y: string, z: boolean) => string[]
|
||||
>bind : <T, U extends unknown[], V>(f: (x: T, ...rest: U) => V, x: T) => (...rest: U) => V
|
||||
>f20 : (x: number, y: string, z: boolean) => string[]
|
||||
>42 : 42
|
||||
|
||||
const f22 = bind(f21, "hello"); // (z: boolean) => string[]
|
||||
>f22 : (z: boolean) => string[]
|
||||
>bind(f21, "hello") : (z: boolean) => string[]
|
||||
>bind : <T, U extends unknown[], V>(f: (x: T, ...rest: U) => V, x: T) => (...rest: U) => V
|
||||
>f21 : (y: string, z: boolean) => string[]
|
||||
>"hello" : "hello"
|
||||
|
||||
const f23 = bind(f22, true); // () => string[]
|
||||
>f23 : () => string[]
|
||||
>bind(f22, true) : () => string[]
|
||||
>bind : <T, U extends unknown[], V>(f: (x: T, ...rest: U) => V, x: T) => (...rest: U) => V
|
||||
>f22 : (z: boolean) => string[]
|
||||
>true : true
|
||||
|
||||
f20(42, "hello", true);
|
||||
>f20(42, "hello", true) : string[]
|
||||
>f20 : (x: number, y: string, z: boolean) => string[]
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
f21("hello", true);
|
||||
>f21("hello", true) : string[]
|
||||
>f21 : (y: string, z: boolean) => string[]
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
f22(true);
|
||||
>f22(true) : string[]
|
||||
>f22 : (z: boolean) => string[]
|
||||
>true : true
|
||||
|
||||
f23();
|
||||
>f23() : string[]
|
||||
>f23 : () => string[]
|
||||
|
||||
declare const g20: (x: number, y?: string, z?: boolean) => string[];
|
||||
>g20 : (x: number, y?: string | undefined, z?: boolean | undefined) => string[]
|
||||
>x : number
|
||||
>y : string | undefined
|
||||
>z : boolean | undefined
|
||||
|
||||
const g21 = bind(g20, 42); // (y: string, z: boolean) => string[]
|
||||
>g21 : (y?: string | undefined, z?: boolean | undefined) => string[]
|
||||
>bind(g20, 42) : (y?: string | undefined, z?: boolean | undefined) => string[]
|
||||
>bind : <T, U extends unknown[], V>(f: (x: T, ...rest: U) => V, x: T) => (...rest: U) => V
|
||||
>g20 : (x: number, y?: string | undefined, z?: boolean | undefined) => string[]
|
||||
>42 : 42
|
||||
|
||||
const g22 = bind(g21, "hello"); // (z: boolean) => string[]
|
||||
>g22 : (z?: boolean | undefined) => string[]
|
||||
>bind(g21, "hello") : (z?: boolean | undefined) => string[]
|
||||
>bind : <T, U extends unknown[], V>(f: (x: T, ...rest: U) => V, x: T) => (...rest: U) => V
|
||||
>g21 : (y?: string | undefined, z?: boolean | undefined) => string[]
|
||||
>"hello" : "hello"
|
||||
|
||||
const g23 = bind(g22, true); // () => string[]
|
||||
>g23 : () => string[]
|
||||
>bind(g22, true) : () => string[]
|
||||
>bind : <T, U extends unknown[], V>(f: (x: T, ...rest: U) => V, x: T) => (...rest: U) => V
|
||||
>g22 : (z?: boolean | undefined) => string[]
|
||||
>true : true
|
||||
|
||||
g20(42, "hello", true);
|
||||
>g20(42, "hello", true) : string[]
|
||||
>g20 : (x: number, y?: string | undefined, z?: boolean | undefined) => string[]
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
g20(42, "hello");
|
||||
>g20(42, "hello") : string[]
|
||||
>g20 : (x: number, y?: string | undefined, z?: boolean | undefined) => string[]
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
|
||||
g20(42);
|
||||
>g20(42) : string[]
|
||||
>g20 : (x: number, y?: string | undefined, z?: boolean | undefined) => string[]
|
||||
>42 : 42
|
||||
|
||||
g21("hello", true);
|
||||
>g21("hello", true) : string[]
|
||||
>g21 : (y?: string | undefined, z?: boolean | undefined) => string[]
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
g21("hello");
|
||||
>g21("hello") : string[]
|
||||
>g21 : (y?: string | undefined, z?: boolean | undefined) => string[]
|
||||
>"hello" : "hello"
|
||||
|
||||
g21();
|
||||
>g21() : string[]
|
||||
>g21 : (y?: string | undefined, z?: boolean | undefined) => string[]
|
||||
|
||||
g22(true);
|
||||
>g22(true) : string[]
|
||||
>g22 : (z?: boolean | undefined) => string[]
|
||||
>true : true
|
||||
|
||||
g22();
|
||||
>g22() : string[]
|
||||
>g22 : (z?: boolean | undefined) => string[]
|
||||
|
||||
g23();
|
||||
>g23() : string[]
|
||||
>g23 : () => string[]
|
||||
|
||||
declare function f30<T, U extends ((x: T) => any)[]>(x: T, ...args: U): U;
|
||||
>f30 : <T, U extends ((x: T) => any)[]>(x: T, ...args: U) => U
|
||||
>T : T
|
||||
>U : U
|
||||
>x : T
|
||||
>T : T
|
||||
>x : T
|
||||
>T : T
|
||||
>args : U
|
||||
>U : U
|
||||
>U : U
|
||||
|
||||
const c30 = f30(42, x => "" + x, x => x + 1); // [(x: number) => string, (x: number) => number]
|
||||
>c30 : [(x: number) => string, (x: number) => number]
|
||||
>f30(42, x => "" + x, x => x + 1) : [(x: number) => string, (x: number) => number]
|
||||
>f30 : <T, U extends ((x: T) => any)[]>(x: T, ...args: U) => U
|
||||
>42 : 42
|
||||
>x => "" + x : (x: number) => string
|
||||
>x : number
|
||||
>"" + x : string
|
||||
>"" : ""
|
||||
>x : number
|
||||
>x => x + 1 : (x: number) => number
|
||||
>x : number
|
||||
>x + 1 : number
|
||||
>x : number
|
||||
>1 : 1
|
||||
|
||||
type Parameters<T extends Function> = T extends ((...args: infer U) => any) | (new(...args: infer U) => any) ? U : any[];
|
||||
>Parameters : Parameters<T>
|
||||
>T : T
|
||||
>Function : Function
|
||||
>T : T
|
||||
>args : U
|
||||
>U : U
|
||||
>args : U
|
||||
>U : U
|
||||
>U : U
|
||||
|
||||
type T01 = Parameters<(x: number, y: string, z: boolean) => void>;
|
||||
>T01 : [number, string, boolean]
|
||||
>Parameters : Parameters<T>
|
||||
>x : number
|
||||
>y : string
|
||||
>z : boolean
|
||||
|
||||
type T02 = Parameters<(...args: [number, string, boolean]) => void>;
|
||||
>T02 : [number, string, boolean]
|
||||
>Parameters : Parameters<T>
|
||||
>args : [number, string, boolean]
|
||||
|
||||
type T03 = Parameters<new (x: number, y: string, z: boolean) => void>;
|
||||
>T03 : [number, string, boolean]
|
||||
>Parameters : Parameters<T>
|
||||
>x : number
|
||||
>y : string
|
||||
>z : boolean
|
||||
|
||||
type T04 = Parameters<new (...args: [number, string, boolean]) => void>;
|
||||
>T04 : [number, string, boolean]
|
||||
>Parameters : Parameters<T>
|
||||
>args : [number, string, boolean]
|
||||
|
||||
type T05<T> = Parameters<(...args: T[]) => void>;
|
||||
>T05 : T[]
|
||||
>T : T
|
||||
>Parameters : Parameters<T>
|
||||
>args : T[]
|
||||
>T : T
|
||||
|
||||
type T06<T> = Parameters<new (...args: []) => void>;
|
||||
>T06 : []
|
||||
>T : T
|
||||
>Parameters : Parameters<T>
|
||||
>args : []
|
||||
|
||||
type T07<T extends any[]> = Parameters<(...args: T) => void>;
|
||||
>T07 : T
|
||||
>T : T
|
||||
>Parameters : Parameters<T>
|
||||
>args : T
|
||||
>T : T
|
||||
|
||||
type T08<T extends any[]> = Parameters<new (...args: T) => void>;
|
||||
>T08 : T
|
||||
>T : T
|
||||
>Parameters : Parameters<T>
|
||||
>args : T
|
||||
>T : T
|
||||
|
||||
type T09 = Parameters<Function>;
|
||||
>T09 : any[]
|
||||
>Parameters : Parameters<T>
|
||||
>Function : Function
|
||||
|
||||
type Record1 = {
|
||||
>Record1 : Record1
|
||||
|
||||
move: [number, 'left' | 'right'];
|
||||
>move : [number, "left" | "right"]
|
||||
|
||||
jump: [number, 'up' | 'down'];
|
||||
>jump : [number, "up" | "down"]
|
||||
|
||||
stop: string;
|
||||
>stop : string
|
||||
|
||||
done: [];
|
||||
>done : []
|
||||
}
|
||||
|
||||
type EventType<T> = {
|
||||
>EventType : EventType<T>
|
||||
>T : T
|
||||
|
||||
emit<K extends keyof T = keyof T>(e: K, ...payload: T[K] extends any[] ? T[K] : [T[K]]): void;
|
||||
>emit : <K extends keyof T = keyof T>(e: K, ...payload: T[K] extends any[] ? T[K] : [T[K]]) => void
|
||||
>K : K
|
||||
>T : T
|
||||
>T : T
|
||||
>e : K
|
||||
>K : K
|
||||
>payload : T[K] extends any[] ? T[K] : [T[K]]
|
||||
>T : T
|
||||
>K : K
|
||||
>T : T
|
||||
>K : K
|
||||
>T : T
|
||||
>K : K
|
||||
}
|
||||
|
||||
declare var events: EventType<Record1>;
|
||||
>events : EventType<Record1>
|
||||
>EventType : EventType<T>
|
||||
>Record1 : Record1
|
||||
|
||||
events.emit('move', 10, 'left');
|
||||
>events.emit('move', 10, 'left') : void
|
||||
>events.emit : <K extends "move" | "jump" | "stop" | "done" = "move" | "jump" | "stop" | "done">(e: K, ...payload: Record1[K] extends any[] ? Record1[K] : [Record1[K]]) => void
|
||||
>events : EventType<Record1>
|
||||
>emit : <K extends "move" | "jump" | "stop" | "done" = "move" | "jump" | "stop" | "done">(e: K, ...payload: Record1[K] extends any[] ? Record1[K] : [Record1[K]]) => void
|
||||
>'move' : "move"
|
||||
>10 : 10
|
||||
>'left' : "left"
|
||||
|
||||
events.emit('jump', 20, 'up');
|
||||
>events.emit('jump', 20, 'up') : void
|
||||
>events.emit : <K extends "move" | "jump" | "stop" | "done" = "move" | "jump" | "stop" | "done">(e: K, ...payload: Record1[K] extends any[] ? Record1[K] : [Record1[K]]) => void
|
||||
>events : EventType<Record1>
|
||||
>emit : <K extends "move" | "jump" | "stop" | "done" = "move" | "jump" | "stop" | "done">(e: K, ...payload: Record1[K] extends any[] ? Record1[K] : [Record1[K]]) => void
|
||||
>'jump' : "jump"
|
||||
>20 : 20
|
||||
>'up' : "up"
|
||||
|
||||
events.emit('stop', 'Bye!');
|
||||
>events.emit('stop', 'Bye!') : void
|
||||
>events.emit : <K extends "move" | "jump" | "stop" | "done" = "move" | "jump" | "stop" | "done">(e: K, ...payload: Record1[K] extends any[] ? Record1[K] : [Record1[K]]) => void
|
||||
>events : EventType<Record1>
|
||||
>emit : <K extends "move" | "jump" | "stop" | "done" = "move" | "jump" | "stop" | "done">(e: K, ...payload: Record1[K] extends any[] ? Record1[K] : [Record1[K]]) => void
|
||||
>'stop' : "stop"
|
||||
>'Bye!' : "Bye!"
|
||||
|
||||
events.emit('done');
|
||||
>events.emit('done') : void
|
||||
>events.emit : <K extends "move" | "jump" | "stop" | "done" = "move" | "jump" | "stop" | "done">(e: K, ...payload: Record1[K] extends any[] ? Record1[K] : [Record1[K]]) => void
|
||||
>events : EventType<Record1>
|
||||
>emit : <K extends "move" | "jump" | "stop" | "done" = "move" | "jump" | "stop" | "done">(e: K, ...payload: Record1[K] extends any[] ? Record1[K] : [Record1[K]]) => void
|
||||
>'done' : "done"
|
||||
|
||||
@@ -0,0 +1,158 @@
|
||||
//// [genericRestParameters2.ts]
|
||||
declare const t1: [number, string, ...boolean[]];
|
||||
declare const t2: [string, ...boolean[]];
|
||||
declare const t3: [...boolean[]];
|
||||
declare const t4: [];
|
||||
|
||||
declare let f00: (...x: [number, string, boolean]) => void;
|
||||
declare let f01: (a: number, ...x: [string, boolean]) => void;
|
||||
declare let f02: (a: number, b: string, ...x: [boolean]) => void;
|
||||
declare let f03: (a: number, b: string, c: boolean) => void;
|
||||
declare let f04: (a: number, b: string, c: boolean, ...x: []) => void;
|
||||
|
||||
declare let f10: (...x: [number, string, ...boolean[]]) => void;
|
||||
declare let f11: (a: number, ...x: [string, ...boolean[]]) => void;
|
||||
declare let f12: (a: number, b: string, ...x: [...boolean[]]) => void;
|
||||
declare let f13: (a: number, b: string, ...c: boolean[]) => void;
|
||||
|
||||
declare const ns: [number, string];
|
||||
declare const sn: [string, number];
|
||||
|
||||
f10(42, "hello");
|
||||
f10(42, "hello", true);
|
||||
f10(42, "hello", true, false);
|
||||
f10(t1[0], t1[1], t1[2], t1[3]);
|
||||
f10(...t1);
|
||||
f10(42, ...t2);
|
||||
f10(42, "hello", ...t3);
|
||||
f10(42, "hello", true, ...t4);
|
||||
f10(42, "hello", true, ...t4, false, ...t3);
|
||||
|
||||
f11(42, "hello");
|
||||
f11(42, "hello", true);
|
||||
f11(42, "hello", true, false);
|
||||
f11(t1[0], t1[1], t1[2], t1[3]);
|
||||
f11(...t1);
|
||||
f11(42, ...t2);
|
||||
f11(42, "hello", ...t3);
|
||||
f11(42, "hello", true, ...t4);
|
||||
f11(42, "hello", true, ...t4, false, ...t3);
|
||||
|
||||
f12(42, "hello");
|
||||
f12(42, "hello", true);
|
||||
f12(42, "hello", true, false);
|
||||
f12(t1[0], t1[1], t1[2], t1[3]);
|
||||
f12(...t1);
|
||||
f12(42, ...t2);
|
||||
f12(42, "hello", ...t3);
|
||||
f12(42, "hello", true, ...t4);
|
||||
f12(42, "hello", true, ...t4, false, ...t3);
|
||||
|
||||
f13(42, "hello");
|
||||
f13(42, "hello", true);
|
||||
f13(42, "hello", true, false);
|
||||
f13(t1[0], t1[1], t1[2], t1[3]);
|
||||
f13(...t1);
|
||||
f13(42, ...t2);
|
||||
f13(42, "hello", ...t3);
|
||||
f13(42, "hello", true, ...t4);
|
||||
f13(42, "hello", true, ...t4, false, ...t3);
|
||||
|
||||
declare const f20: <T extends unknown[]>(...args: T) => T;
|
||||
|
||||
f20(...t1);
|
||||
f20(42, ...t2);
|
||||
f20(42, "hello", ...t3);
|
||||
f20(42, "hello", ...t2, true);
|
||||
|
||||
type Parameters<T extends Function> = T extends ((...args: infer U) => any) | (new(...args: infer U) => any) ? U : any[];
|
||||
|
||||
type T01 = Parameters<(x: number, y: string, ...z: boolean[]) => void>;
|
||||
type T02 = Parameters<(...args: [number, string, ...boolean[]]) => void>;
|
||||
type T03 = Parameters<new (x: number, y: string, ...z: boolean[]) => void>;
|
||||
type T04 = Parameters<new (...args: [number, string, ...boolean[]]) => void>;
|
||||
type T05<T extends any[]> = Parameters<(x: string, ...args: T) => void>;
|
||||
type T06 = T05<[number, ...boolean[]]>;
|
||||
|
||||
type P1<T extends Function> = T extends (head: infer A, ...tail: infer B) => any ? { head: A, tail: B } : any[];
|
||||
|
||||
type T10 = P1<(x: number, y: string, ...z: boolean[]) => void>;
|
||||
type T11 = P1<(...z: number[]) => void>;
|
||||
type T12 = P1<(x: number, y: number) => void>;
|
||||
|
||||
|
||||
//// [genericRestParameters2.js]
|
||||
"use strict";
|
||||
f10(42, "hello");
|
||||
f10(42, "hello", true);
|
||||
f10(42, "hello", true, false);
|
||||
f10(t1[0], t1[1], t1[2], t1[3]);
|
||||
f10.apply(void 0, t1);
|
||||
f10.apply(void 0, [42].concat(t2));
|
||||
f10.apply(void 0, [42, "hello"].concat(t3));
|
||||
f10.apply(void 0, [42, "hello", true].concat(t4));
|
||||
f10.apply(void 0, [42, "hello", true].concat(t4, [false], t3));
|
||||
f11(42, "hello");
|
||||
f11(42, "hello", true);
|
||||
f11(42, "hello", true, false);
|
||||
f11(t1[0], t1[1], t1[2], t1[3]);
|
||||
f11.apply(void 0, t1);
|
||||
f11.apply(void 0, [42].concat(t2));
|
||||
f11.apply(void 0, [42, "hello"].concat(t3));
|
||||
f11.apply(void 0, [42, "hello", true].concat(t4));
|
||||
f11.apply(void 0, [42, "hello", true].concat(t4, [false], t3));
|
||||
f12(42, "hello");
|
||||
f12(42, "hello", true);
|
||||
f12(42, "hello", true, false);
|
||||
f12(t1[0], t1[1], t1[2], t1[3]);
|
||||
f12.apply(void 0, t1);
|
||||
f12.apply(void 0, [42].concat(t2));
|
||||
f12.apply(void 0, [42, "hello"].concat(t3));
|
||||
f12.apply(void 0, [42, "hello", true].concat(t4));
|
||||
f12.apply(void 0, [42, "hello", true].concat(t4, [false], t3));
|
||||
f13(42, "hello");
|
||||
f13(42, "hello", true);
|
||||
f13(42, "hello", true, false);
|
||||
f13(t1[0], t1[1], t1[2], t1[3]);
|
||||
f13.apply(void 0, t1);
|
||||
f13.apply(void 0, [42].concat(t2));
|
||||
f13.apply(void 0, [42, "hello"].concat(t3));
|
||||
f13.apply(void 0, [42, "hello", true].concat(t4));
|
||||
f13.apply(void 0, [42, "hello", true].concat(t4, [false], t3));
|
||||
f20.apply(void 0, t1);
|
||||
f20.apply(void 0, [42].concat(t2));
|
||||
f20.apply(void 0, [42, "hello"].concat(t3));
|
||||
f20.apply(void 0, [42, "hello"].concat(t2, [true]));
|
||||
|
||||
|
||||
//// [genericRestParameters2.d.ts]
|
||||
declare const t1: [number, string, ...boolean[]];
|
||||
declare const t2: [string, ...boolean[]];
|
||||
declare const t3: [...boolean[]];
|
||||
declare const t4: [];
|
||||
declare let f00: (...x: [number, string, boolean]) => void;
|
||||
declare let f01: (a: number, ...x: [string, boolean]) => void;
|
||||
declare let f02: (a: number, b: string, ...x: [boolean]) => void;
|
||||
declare let f03: (a: number, b: string, c: boolean) => void;
|
||||
declare let f04: (a: number, b: string, c: boolean, ...x: []) => void;
|
||||
declare let f10: (...x: [number, string, ...boolean[]]) => void;
|
||||
declare let f11: (a: number, ...x: [string, ...boolean[]]) => void;
|
||||
declare let f12: (a: number, b: string, ...x: [...boolean[]]) => void;
|
||||
declare let f13: (a: number, b: string, ...c: boolean[]) => void;
|
||||
declare const ns: [number, string];
|
||||
declare const sn: [string, number];
|
||||
declare const f20: <T extends unknown[]>(...args: T) => T;
|
||||
declare type Parameters<T extends Function> = T extends ((...args: infer U) => any) | (new (...args: infer U) => any) ? U : any[];
|
||||
declare type T01 = Parameters<(x: number, y: string, ...z: boolean[]) => void>;
|
||||
declare type T02 = Parameters<(...args: [number, string, ...boolean[]]) => void>;
|
||||
declare type T03 = Parameters<new (x: number, y: string, ...z: boolean[]) => void>;
|
||||
declare type T04 = Parameters<new (...args: [number, string, ...boolean[]]) => void>;
|
||||
declare type T05<T extends any[]> = Parameters<(x: string, ...args: T) => void>;
|
||||
declare type T06 = T05<[number, ...boolean[]]>;
|
||||
declare type P1<T extends Function> = T extends (head: infer A, ...tail: infer B) => any ? {
|
||||
head: A;
|
||||
tail: B;
|
||||
} : any[];
|
||||
declare type T10 = P1<(x: number, y: string, ...z: boolean[]) => void>;
|
||||
declare type T11 = P1<(...z: number[]) => void>;
|
||||
declare type T12 = P1<(x: number, y: number) => void>;
|
||||
@@ -0,0 +1,326 @@
|
||||
=== tests/cases/conformance/types/rest/genericRestParameters2.ts ===
|
||||
declare const t1: [number, string, ...boolean[]];
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
|
||||
declare const t2: [string, ...boolean[]];
|
||||
>t2 : Symbol(t2, Decl(genericRestParameters2.ts, 1, 13))
|
||||
|
||||
declare const t3: [...boolean[]];
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters2.ts, 2, 13))
|
||||
|
||||
declare const t4: [];
|
||||
>t4 : Symbol(t4, Decl(genericRestParameters2.ts, 3, 13))
|
||||
|
||||
declare let f00: (...x: [number, string, boolean]) => void;
|
||||
>f00 : Symbol(f00, Decl(genericRestParameters2.ts, 5, 11))
|
||||
>x : Symbol(x, Decl(genericRestParameters2.ts, 5, 18))
|
||||
|
||||
declare let f01: (a: number, ...x: [string, boolean]) => void;
|
||||
>f01 : Symbol(f01, Decl(genericRestParameters2.ts, 6, 11))
|
||||
>a : Symbol(a, Decl(genericRestParameters2.ts, 6, 18))
|
||||
>x : Symbol(x, Decl(genericRestParameters2.ts, 6, 28))
|
||||
|
||||
declare let f02: (a: number, b: string, ...x: [boolean]) => void;
|
||||
>f02 : Symbol(f02, Decl(genericRestParameters2.ts, 7, 11))
|
||||
>a : Symbol(a, Decl(genericRestParameters2.ts, 7, 18))
|
||||
>b : Symbol(b, Decl(genericRestParameters2.ts, 7, 28))
|
||||
>x : Symbol(x, Decl(genericRestParameters2.ts, 7, 39))
|
||||
|
||||
declare let f03: (a: number, b: string, c: boolean) => void;
|
||||
>f03 : Symbol(f03, Decl(genericRestParameters2.ts, 8, 11))
|
||||
>a : Symbol(a, Decl(genericRestParameters2.ts, 8, 18))
|
||||
>b : Symbol(b, Decl(genericRestParameters2.ts, 8, 28))
|
||||
>c : Symbol(c, Decl(genericRestParameters2.ts, 8, 39))
|
||||
|
||||
declare let f04: (a: number, b: string, c: boolean, ...x: []) => void;
|
||||
>f04 : Symbol(f04, Decl(genericRestParameters2.ts, 9, 11))
|
||||
>a : Symbol(a, Decl(genericRestParameters2.ts, 9, 18))
|
||||
>b : Symbol(b, Decl(genericRestParameters2.ts, 9, 28))
|
||||
>c : Symbol(c, Decl(genericRestParameters2.ts, 9, 39))
|
||||
>x : Symbol(x, Decl(genericRestParameters2.ts, 9, 51))
|
||||
|
||||
declare let f10: (...x: [number, string, ...boolean[]]) => void;
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters2.ts, 11, 11))
|
||||
>x : Symbol(x, Decl(genericRestParameters2.ts, 11, 18))
|
||||
|
||||
declare let f11: (a: number, ...x: [string, ...boolean[]]) => void;
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters2.ts, 12, 11))
|
||||
>a : Symbol(a, Decl(genericRestParameters2.ts, 12, 18))
|
||||
>x : Symbol(x, Decl(genericRestParameters2.ts, 12, 28))
|
||||
|
||||
declare let f12: (a: number, b: string, ...x: [...boolean[]]) => void;
|
||||
>f12 : Symbol(f12, Decl(genericRestParameters2.ts, 13, 11))
|
||||
>a : Symbol(a, Decl(genericRestParameters2.ts, 13, 18))
|
||||
>b : Symbol(b, Decl(genericRestParameters2.ts, 13, 28))
|
||||
>x : Symbol(x, Decl(genericRestParameters2.ts, 13, 39))
|
||||
|
||||
declare let f13: (a: number, b: string, ...c: boolean[]) => void;
|
||||
>f13 : Symbol(f13, Decl(genericRestParameters2.ts, 14, 11))
|
||||
>a : Symbol(a, Decl(genericRestParameters2.ts, 14, 18))
|
||||
>b : Symbol(b, Decl(genericRestParameters2.ts, 14, 28))
|
||||
>c : Symbol(c, Decl(genericRestParameters2.ts, 14, 39))
|
||||
|
||||
declare const ns: [number, string];
|
||||
>ns : Symbol(ns, Decl(genericRestParameters2.ts, 16, 13))
|
||||
|
||||
declare const sn: [string, number];
|
||||
>sn : Symbol(sn, Decl(genericRestParameters2.ts, 17, 13))
|
||||
|
||||
f10(42, "hello");
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters2.ts, 11, 11))
|
||||
|
||||
f10(42, "hello", true);
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters2.ts, 11, 11))
|
||||
|
||||
f10(42, "hello", true, false);
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters2.ts, 11, 11))
|
||||
|
||||
f10(t1[0], t1[1], t1[2], t1[3]);
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters2.ts, 11, 11))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
>0 : Symbol(0)
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
>1 : Symbol(1)
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
|
||||
f10(...t1);
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters2.ts, 11, 11))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
|
||||
f10(42, ...t2);
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters2.ts, 11, 11))
|
||||
>t2 : Symbol(t2, Decl(genericRestParameters2.ts, 1, 13))
|
||||
|
||||
f10(42, "hello", ...t3);
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters2.ts, 11, 11))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters2.ts, 2, 13))
|
||||
|
||||
f10(42, "hello", true, ...t4);
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters2.ts, 11, 11))
|
||||
>t4 : Symbol(t4, Decl(genericRestParameters2.ts, 3, 13))
|
||||
|
||||
f10(42, "hello", true, ...t4, false, ...t3);
|
||||
>f10 : Symbol(f10, Decl(genericRestParameters2.ts, 11, 11))
|
||||
>t4 : Symbol(t4, Decl(genericRestParameters2.ts, 3, 13))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters2.ts, 2, 13))
|
||||
|
||||
f11(42, "hello");
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters2.ts, 12, 11))
|
||||
|
||||
f11(42, "hello", true);
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters2.ts, 12, 11))
|
||||
|
||||
f11(42, "hello", true, false);
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters2.ts, 12, 11))
|
||||
|
||||
f11(t1[0], t1[1], t1[2], t1[3]);
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters2.ts, 12, 11))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
>0 : Symbol(0)
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
>1 : Symbol(1)
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
|
||||
f11(...t1);
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters2.ts, 12, 11))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
|
||||
f11(42, ...t2);
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters2.ts, 12, 11))
|
||||
>t2 : Symbol(t2, Decl(genericRestParameters2.ts, 1, 13))
|
||||
|
||||
f11(42, "hello", ...t3);
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters2.ts, 12, 11))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters2.ts, 2, 13))
|
||||
|
||||
f11(42, "hello", true, ...t4);
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters2.ts, 12, 11))
|
||||
>t4 : Symbol(t4, Decl(genericRestParameters2.ts, 3, 13))
|
||||
|
||||
f11(42, "hello", true, ...t4, false, ...t3);
|
||||
>f11 : Symbol(f11, Decl(genericRestParameters2.ts, 12, 11))
|
||||
>t4 : Symbol(t4, Decl(genericRestParameters2.ts, 3, 13))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters2.ts, 2, 13))
|
||||
|
||||
f12(42, "hello");
|
||||
>f12 : Symbol(f12, Decl(genericRestParameters2.ts, 13, 11))
|
||||
|
||||
f12(42, "hello", true);
|
||||
>f12 : Symbol(f12, Decl(genericRestParameters2.ts, 13, 11))
|
||||
|
||||
f12(42, "hello", true, false);
|
||||
>f12 : Symbol(f12, Decl(genericRestParameters2.ts, 13, 11))
|
||||
|
||||
f12(t1[0], t1[1], t1[2], t1[3]);
|
||||
>f12 : Symbol(f12, Decl(genericRestParameters2.ts, 13, 11))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
>0 : Symbol(0)
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
>1 : Symbol(1)
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
|
||||
f12(...t1);
|
||||
>f12 : Symbol(f12, Decl(genericRestParameters2.ts, 13, 11))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
|
||||
f12(42, ...t2);
|
||||
>f12 : Symbol(f12, Decl(genericRestParameters2.ts, 13, 11))
|
||||
>t2 : Symbol(t2, Decl(genericRestParameters2.ts, 1, 13))
|
||||
|
||||
f12(42, "hello", ...t3);
|
||||
>f12 : Symbol(f12, Decl(genericRestParameters2.ts, 13, 11))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters2.ts, 2, 13))
|
||||
|
||||
f12(42, "hello", true, ...t4);
|
||||
>f12 : Symbol(f12, Decl(genericRestParameters2.ts, 13, 11))
|
||||
>t4 : Symbol(t4, Decl(genericRestParameters2.ts, 3, 13))
|
||||
|
||||
f12(42, "hello", true, ...t4, false, ...t3);
|
||||
>f12 : Symbol(f12, Decl(genericRestParameters2.ts, 13, 11))
|
||||
>t4 : Symbol(t4, Decl(genericRestParameters2.ts, 3, 13))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters2.ts, 2, 13))
|
||||
|
||||
f13(42, "hello");
|
||||
>f13 : Symbol(f13, Decl(genericRestParameters2.ts, 14, 11))
|
||||
|
||||
f13(42, "hello", true);
|
||||
>f13 : Symbol(f13, Decl(genericRestParameters2.ts, 14, 11))
|
||||
|
||||
f13(42, "hello", true, false);
|
||||
>f13 : Symbol(f13, Decl(genericRestParameters2.ts, 14, 11))
|
||||
|
||||
f13(t1[0], t1[1], t1[2], t1[3]);
|
||||
>f13 : Symbol(f13, Decl(genericRestParameters2.ts, 14, 11))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
>0 : Symbol(0)
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
>1 : Symbol(1)
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
|
||||
f13(...t1);
|
||||
>f13 : Symbol(f13, Decl(genericRestParameters2.ts, 14, 11))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
|
||||
f13(42, ...t2);
|
||||
>f13 : Symbol(f13, Decl(genericRestParameters2.ts, 14, 11))
|
||||
>t2 : Symbol(t2, Decl(genericRestParameters2.ts, 1, 13))
|
||||
|
||||
f13(42, "hello", ...t3);
|
||||
>f13 : Symbol(f13, Decl(genericRestParameters2.ts, 14, 11))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters2.ts, 2, 13))
|
||||
|
||||
f13(42, "hello", true, ...t4);
|
||||
>f13 : Symbol(f13, Decl(genericRestParameters2.ts, 14, 11))
|
||||
>t4 : Symbol(t4, Decl(genericRestParameters2.ts, 3, 13))
|
||||
|
||||
f13(42, "hello", true, ...t4, false, ...t3);
|
||||
>f13 : Symbol(f13, Decl(genericRestParameters2.ts, 14, 11))
|
||||
>t4 : Symbol(t4, Decl(genericRestParameters2.ts, 3, 13))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters2.ts, 2, 13))
|
||||
|
||||
declare const f20: <T extends unknown[]>(...args: T) => T;
|
||||
>f20 : Symbol(f20, Decl(genericRestParameters2.ts, 59, 13))
|
||||
>T : Symbol(T, Decl(genericRestParameters2.ts, 59, 20))
|
||||
>args : Symbol(args, Decl(genericRestParameters2.ts, 59, 41))
|
||||
>T : Symbol(T, Decl(genericRestParameters2.ts, 59, 20))
|
||||
>T : Symbol(T, Decl(genericRestParameters2.ts, 59, 20))
|
||||
|
||||
f20(...t1);
|
||||
>f20 : Symbol(f20, Decl(genericRestParameters2.ts, 59, 13))
|
||||
>t1 : Symbol(t1, Decl(genericRestParameters2.ts, 0, 13))
|
||||
|
||||
f20(42, ...t2);
|
||||
>f20 : Symbol(f20, Decl(genericRestParameters2.ts, 59, 13))
|
||||
>t2 : Symbol(t2, Decl(genericRestParameters2.ts, 1, 13))
|
||||
|
||||
f20(42, "hello", ...t3);
|
||||
>f20 : Symbol(f20, Decl(genericRestParameters2.ts, 59, 13))
|
||||
>t3 : Symbol(t3, Decl(genericRestParameters2.ts, 2, 13))
|
||||
|
||||
f20(42, "hello", ...t2, true);
|
||||
>f20 : Symbol(f20, Decl(genericRestParameters2.ts, 59, 13))
|
||||
>t2 : Symbol(t2, Decl(genericRestParameters2.ts, 1, 13))
|
||||
|
||||
type Parameters<T extends Function> = T extends ((...args: infer U) => any) | (new(...args: infer U) => any) ? U : any[];
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters2.ts, 64, 30))
|
||||
>T : Symbol(T, Decl(genericRestParameters2.ts, 66, 16))
|
||||
>Function : Symbol(Function, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
>T : Symbol(T, Decl(genericRestParameters2.ts, 66, 16))
|
||||
>args : Symbol(args, Decl(genericRestParameters2.ts, 66, 50))
|
||||
>U : Symbol(U, Decl(genericRestParameters2.ts, 66, 64), Decl(genericRestParameters2.ts, 66, 97))
|
||||
>args : Symbol(args, Decl(genericRestParameters2.ts, 66, 83))
|
||||
>U : Symbol(U, Decl(genericRestParameters2.ts, 66, 64), Decl(genericRestParameters2.ts, 66, 97))
|
||||
>U : Symbol(U, Decl(genericRestParameters2.ts, 66, 64), Decl(genericRestParameters2.ts, 66, 97))
|
||||
|
||||
type T01 = Parameters<(x: number, y: string, ...z: boolean[]) => void>;
|
||||
>T01 : Symbol(T01, Decl(genericRestParameters2.ts, 66, 121))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters2.ts, 64, 30))
|
||||
>x : Symbol(x, Decl(genericRestParameters2.ts, 68, 23))
|
||||
>y : Symbol(y, Decl(genericRestParameters2.ts, 68, 33))
|
||||
>z : Symbol(z, Decl(genericRestParameters2.ts, 68, 44))
|
||||
|
||||
type T02 = Parameters<(...args: [number, string, ...boolean[]]) => void>;
|
||||
>T02 : Symbol(T02, Decl(genericRestParameters2.ts, 68, 71))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters2.ts, 64, 30))
|
||||
>args : Symbol(args, Decl(genericRestParameters2.ts, 69, 23))
|
||||
|
||||
type T03 = Parameters<new (x: number, y: string, ...z: boolean[]) => void>;
|
||||
>T03 : Symbol(T03, Decl(genericRestParameters2.ts, 69, 73))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters2.ts, 64, 30))
|
||||
>x : Symbol(x, Decl(genericRestParameters2.ts, 70, 27))
|
||||
>y : Symbol(y, Decl(genericRestParameters2.ts, 70, 37))
|
||||
>z : Symbol(z, Decl(genericRestParameters2.ts, 70, 48))
|
||||
|
||||
type T04 = Parameters<new (...args: [number, string, ...boolean[]]) => void>;
|
||||
>T04 : Symbol(T04, Decl(genericRestParameters2.ts, 70, 75))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters2.ts, 64, 30))
|
||||
>args : Symbol(args, Decl(genericRestParameters2.ts, 71, 27))
|
||||
|
||||
type T05<T extends any[]> = Parameters<(x: string, ...args: T) => void>;
|
||||
>T05 : Symbol(T05, Decl(genericRestParameters2.ts, 71, 77))
|
||||
>T : Symbol(T, Decl(genericRestParameters2.ts, 72, 9))
|
||||
>Parameters : Symbol(Parameters, Decl(genericRestParameters2.ts, 64, 30))
|
||||
>x : Symbol(x, Decl(genericRestParameters2.ts, 72, 40))
|
||||
>args : Symbol(args, Decl(genericRestParameters2.ts, 72, 50))
|
||||
>T : Symbol(T, Decl(genericRestParameters2.ts, 72, 9))
|
||||
|
||||
type T06 = T05<[number, ...boolean[]]>;
|
||||
>T06 : Symbol(T06, Decl(genericRestParameters2.ts, 72, 72))
|
||||
>T05 : Symbol(T05, Decl(genericRestParameters2.ts, 71, 77))
|
||||
|
||||
type P1<T extends Function> = T extends (head: infer A, ...tail: infer B) => any ? { head: A, tail: B } : any[];
|
||||
>P1 : Symbol(P1, Decl(genericRestParameters2.ts, 73, 39))
|
||||
>T : Symbol(T, Decl(genericRestParameters2.ts, 75, 8))
|
||||
>Function : Symbol(Function, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --))
|
||||
>T : Symbol(T, Decl(genericRestParameters2.ts, 75, 8))
|
||||
>head : Symbol(head, Decl(genericRestParameters2.ts, 75, 41))
|
||||
>A : Symbol(A, Decl(genericRestParameters2.ts, 75, 52))
|
||||
>tail : Symbol(tail, Decl(genericRestParameters2.ts, 75, 55))
|
||||
>B : Symbol(B, Decl(genericRestParameters2.ts, 75, 70))
|
||||
>head : Symbol(head, Decl(genericRestParameters2.ts, 75, 84))
|
||||
>A : Symbol(A, Decl(genericRestParameters2.ts, 75, 52))
|
||||
>tail : Symbol(tail, Decl(genericRestParameters2.ts, 75, 93))
|
||||
>B : Symbol(B, Decl(genericRestParameters2.ts, 75, 70))
|
||||
|
||||
type T10 = P1<(x: number, y: string, ...z: boolean[]) => void>;
|
||||
>T10 : Symbol(T10, Decl(genericRestParameters2.ts, 75, 112))
|
||||
>P1 : Symbol(P1, Decl(genericRestParameters2.ts, 73, 39))
|
||||
>x : Symbol(x, Decl(genericRestParameters2.ts, 77, 15))
|
||||
>y : Symbol(y, Decl(genericRestParameters2.ts, 77, 25))
|
||||
>z : Symbol(z, Decl(genericRestParameters2.ts, 77, 36))
|
||||
|
||||
type T11 = P1<(...z: number[]) => void>;
|
||||
>T11 : Symbol(T11, Decl(genericRestParameters2.ts, 77, 63))
|
||||
>P1 : Symbol(P1, Decl(genericRestParameters2.ts, 73, 39))
|
||||
>z : Symbol(z, Decl(genericRestParameters2.ts, 78, 15))
|
||||
|
||||
type T12 = P1<(x: number, y: number) => void>;
|
||||
>T12 : Symbol(T12, Decl(genericRestParameters2.ts, 78, 40))
|
||||
>P1 : Symbol(P1, Decl(genericRestParameters2.ts, 73, 39))
|
||||
>x : Symbol(x, Decl(genericRestParameters2.ts, 79, 15))
|
||||
>y : Symbol(y, Decl(genericRestParameters2.ts, 79, 25))
|
||||
|
||||
@@ -0,0 +1,500 @@
|
||||
=== tests/cases/conformance/types/rest/genericRestParameters2.ts ===
|
||||
declare const t1: [number, string, ...boolean[]];
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
|
||||
declare const t2: [string, ...boolean[]];
|
||||
>t2 : [string, ...boolean[]]
|
||||
|
||||
declare const t3: [...boolean[]];
|
||||
>t3 : boolean[]
|
||||
|
||||
declare const t4: [];
|
||||
>t4 : []
|
||||
|
||||
declare let f00: (...x: [number, string, boolean]) => void;
|
||||
>f00 : (x_0: number, x_1: string, x_2: boolean) => void
|
||||
>x : [number, string, boolean]
|
||||
|
||||
declare let f01: (a: number, ...x: [string, boolean]) => void;
|
||||
>f01 : (a: number, x_0: string, x_1: boolean) => void
|
||||
>a : number
|
||||
>x : [string, boolean]
|
||||
|
||||
declare let f02: (a: number, b: string, ...x: [boolean]) => void;
|
||||
>f02 : (a: number, b: string, x_0: boolean) => void
|
||||
>a : number
|
||||
>b : string
|
||||
>x : [boolean]
|
||||
|
||||
declare let f03: (a: number, b: string, c: boolean) => void;
|
||||
>f03 : (a: number, b: string, c: boolean) => void
|
||||
>a : number
|
||||
>b : string
|
||||
>c : boolean
|
||||
|
||||
declare let f04: (a: number, b: string, c: boolean, ...x: []) => void;
|
||||
>f04 : (a: number, b: string, c: boolean) => void
|
||||
>a : number
|
||||
>b : string
|
||||
>c : boolean
|
||||
>x : []
|
||||
|
||||
declare let f10: (...x: [number, string, ...boolean[]]) => void;
|
||||
>f10 : (x_0: number, x_1: string, ...x_2: boolean[]) => void
|
||||
>x : [number, string, ...boolean[]]
|
||||
|
||||
declare let f11: (a: number, ...x: [string, ...boolean[]]) => void;
|
||||
>f11 : (a: number, x_0: string, ...x_1: boolean[]) => void
|
||||
>a : number
|
||||
>x : [string, ...boolean[]]
|
||||
|
||||
declare let f12: (a: number, b: string, ...x: [...boolean[]]) => void;
|
||||
>f12 : (a: number, b: string, ...x: boolean[]) => void
|
||||
>a : number
|
||||
>b : string
|
||||
>x : boolean[]
|
||||
|
||||
declare let f13: (a: number, b: string, ...c: boolean[]) => void;
|
||||
>f13 : (a: number, b: string, ...c: boolean[]) => void
|
||||
>a : number
|
||||
>b : string
|
||||
>c : boolean[]
|
||||
|
||||
declare const ns: [number, string];
|
||||
>ns : [number, string]
|
||||
|
||||
declare const sn: [string, number];
|
||||
>sn : [string, number]
|
||||
|
||||
f10(42, "hello");
|
||||
>f10(42, "hello") : void
|
||||
>f10 : (x_0: number, x_1: string, ...x_2: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
|
||||
f10(42, "hello", true);
|
||||
>f10(42, "hello", true) : void
|
||||
>f10 : (x_0: number, x_1: string, ...x_2: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
f10(42, "hello", true, false);
|
||||
>f10(42, "hello", true, false) : void
|
||||
>f10 : (x_0: number, x_1: string, ...x_2: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>false : false
|
||||
|
||||
f10(t1[0], t1[1], t1[2], t1[3]);
|
||||
>f10(t1[0], t1[1], t1[2], t1[3]) : void
|
||||
>f10 : (x_0: number, x_1: string, ...x_2: boolean[]) => void
|
||||
>t1[0] : number
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>0 : 0
|
||||
>t1[1] : string
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>1 : 1
|
||||
>t1[2] : boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>2 : 2
|
||||
>t1[3] : boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>3 : 3
|
||||
|
||||
f10(...t1);
|
||||
>f10(...t1) : void
|
||||
>f10 : (x_0: number, x_1: string, ...x_2: boolean[]) => void
|
||||
>...t1 : string | number | boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
|
||||
f10(42, ...t2);
|
||||
>f10(42, ...t2) : void
|
||||
>f10 : (x_0: number, x_1: string, ...x_2: boolean[]) => void
|
||||
>42 : 42
|
||||
>...t2 : string | boolean
|
||||
>t2 : [string, ...boolean[]]
|
||||
|
||||
f10(42, "hello", ...t3);
|
||||
>f10(42, "hello", ...t3) : void
|
||||
>f10 : (x_0: number, x_1: string, ...x_2: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>...t3 : boolean
|
||||
>t3 : boolean[]
|
||||
|
||||
f10(42, "hello", true, ...t4);
|
||||
>f10(42, "hello", true, ...t4) : void
|
||||
>f10 : (x_0: number, x_1: string, ...x_2: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>...t4 : never
|
||||
>t4 : []
|
||||
|
||||
f10(42, "hello", true, ...t4, false, ...t3);
|
||||
>f10(42, "hello", true, ...t4, false, ...t3) : void
|
||||
>f10 : (x_0: number, x_1: string, ...x_2: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>...t4 : never
|
||||
>t4 : []
|
||||
>false : false
|
||||
>...t3 : boolean
|
||||
>t3 : boolean[]
|
||||
|
||||
f11(42, "hello");
|
||||
>f11(42, "hello") : void
|
||||
>f11 : (a: number, x_0: string, ...x_1: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
|
||||
f11(42, "hello", true);
|
||||
>f11(42, "hello", true) : void
|
||||
>f11 : (a: number, x_0: string, ...x_1: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
f11(42, "hello", true, false);
|
||||
>f11(42, "hello", true, false) : void
|
||||
>f11 : (a: number, x_0: string, ...x_1: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>false : false
|
||||
|
||||
f11(t1[0], t1[1], t1[2], t1[3]);
|
||||
>f11(t1[0], t1[1], t1[2], t1[3]) : void
|
||||
>f11 : (a: number, x_0: string, ...x_1: boolean[]) => void
|
||||
>t1[0] : number
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>0 : 0
|
||||
>t1[1] : string
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>1 : 1
|
||||
>t1[2] : boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>2 : 2
|
||||
>t1[3] : boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>3 : 3
|
||||
|
||||
f11(...t1);
|
||||
>f11(...t1) : void
|
||||
>f11 : (a: number, x_0: string, ...x_1: boolean[]) => void
|
||||
>...t1 : string | number | boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
|
||||
f11(42, ...t2);
|
||||
>f11(42, ...t2) : void
|
||||
>f11 : (a: number, x_0: string, ...x_1: boolean[]) => void
|
||||
>42 : 42
|
||||
>...t2 : string | boolean
|
||||
>t2 : [string, ...boolean[]]
|
||||
|
||||
f11(42, "hello", ...t3);
|
||||
>f11(42, "hello", ...t3) : void
|
||||
>f11 : (a: number, x_0: string, ...x_1: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>...t3 : boolean
|
||||
>t3 : boolean[]
|
||||
|
||||
f11(42, "hello", true, ...t4);
|
||||
>f11(42, "hello", true, ...t4) : void
|
||||
>f11 : (a: number, x_0: string, ...x_1: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>...t4 : never
|
||||
>t4 : []
|
||||
|
||||
f11(42, "hello", true, ...t4, false, ...t3);
|
||||
>f11(42, "hello", true, ...t4, false, ...t3) : void
|
||||
>f11 : (a: number, x_0: string, ...x_1: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>...t4 : never
|
||||
>t4 : []
|
||||
>false : false
|
||||
>...t3 : boolean
|
||||
>t3 : boolean[]
|
||||
|
||||
f12(42, "hello");
|
||||
>f12(42, "hello") : void
|
||||
>f12 : (a: number, b: string, ...x: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
|
||||
f12(42, "hello", true);
|
||||
>f12(42, "hello", true) : void
|
||||
>f12 : (a: number, b: string, ...x: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
f12(42, "hello", true, false);
|
||||
>f12(42, "hello", true, false) : void
|
||||
>f12 : (a: number, b: string, ...x: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>false : false
|
||||
|
||||
f12(t1[0], t1[1], t1[2], t1[3]);
|
||||
>f12(t1[0], t1[1], t1[2], t1[3]) : void
|
||||
>f12 : (a: number, b: string, ...x: boolean[]) => void
|
||||
>t1[0] : number
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>0 : 0
|
||||
>t1[1] : string
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>1 : 1
|
||||
>t1[2] : boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>2 : 2
|
||||
>t1[3] : boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>3 : 3
|
||||
|
||||
f12(...t1);
|
||||
>f12(...t1) : void
|
||||
>f12 : (a: number, b: string, ...x: boolean[]) => void
|
||||
>...t1 : string | number | boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
|
||||
f12(42, ...t2);
|
||||
>f12(42, ...t2) : void
|
||||
>f12 : (a: number, b: string, ...x: boolean[]) => void
|
||||
>42 : 42
|
||||
>...t2 : string | boolean
|
||||
>t2 : [string, ...boolean[]]
|
||||
|
||||
f12(42, "hello", ...t3);
|
||||
>f12(42, "hello", ...t3) : void
|
||||
>f12 : (a: number, b: string, ...x: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>...t3 : boolean
|
||||
>t3 : boolean[]
|
||||
|
||||
f12(42, "hello", true, ...t4);
|
||||
>f12(42, "hello", true, ...t4) : void
|
||||
>f12 : (a: number, b: string, ...x: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>...t4 : never
|
||||
>t4 : []
|
||||
|
||||
f12(42, "hello", true, ...t4, false, ...t3);
|
||||
>f12(42, "hello", true, ...t4, false, ...t3) : void
|
||||
>f12 : (a: number, b: string, ...x: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>...t4 : never
|
||||
>t4 : []
|
||||
>false : false
|
||||
>...t3 : boolean
|
||||
>t3 : boolean[]
|
||||
|
||||
f13(42, "hello");
|
||||
>f13(42, "hello") : void
|
||||
>f13 : (a: number, b: string, ...c: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
|
||||
f13(42, "hello", true);
|
||||
>f13(42, "hello", true) : void
|
||||
>f13 : (a: number, b: string, ...c: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
f13(42, "hello", true, false);
|
||||
>f13(42, "hello", true, false) : void
|
||||
>f13 : (a: number, b: string, ...c: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>false : false
|
||||
|
||||
f13(t1[0], t1[1], t1[2], t1[3]);
|
||||
>f13(t1[0], t1[1], t1[2], t1[3]) : void
|
||||
>f13 : (a: number, b: string, ...c: boolean[]) => void
|
||||
>t1[0] : number
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>0 : 0
|
||||
>t1[1] : string
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>1 : 1
|
||||
>t1[2] : boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>2 : 2
|
||||
>t1[3] : boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
>3 : 3
|
||||
|
||||
f13(...t1);
|
||||
>f13(...t1) : void
|
||||
>f13 : (a: number, b: string, ...c: boolean[]) => void
|
||||
>...t1 : string | number | boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
|
||||
f13(42, ...t2);
|
||||
>f13(42, ...t2) : void
|
||||
>f13 : (a: number, b: string, ...c: boolean[]) => void
|
||||
>42 : 42
|
||||
>...t2 : string | boolean
|
||||
>t2 : [string, ...boolean[]]
|
||||
|
||||
f13(42, "hello", ...t3);
|
||||
>f13(42, "hello", ...t3) : void
|
||||
>f13 : (a: number, b: string, ...c: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>...t3 : boolean
|
||||
>t3 : boolean[]
|
||||
|
||||
f13(42, "hello", true, ...t4);
|
||||
>f13(42, "hello", true, ...t4) : void
|
||||
>f13 : (a: number, b: string, ...c: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>...t4 : never
|
||||
>t4 : []
|
||||
|
||||
f13(42, "hello", true, ...t4, false, ...t3);
|
||||
>f13(42, "hello", true, ...t4, false, ...t3) : void
|
||||
>f13 : (a: number, b: string, ...c: boolean[]) => void
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
>...t4 : never
|
||||
>t4 : []
|
||||
>false : false
|
||||
>...t3 : boolean
|
||||
>t3 : boolean[]
|
||||
|
||||
declare const f20: <T extends unknown[]>(...args: T) => T;
|
||||
>f20 : <T extends unknown[]>(...args: T) => T
|
||||
>T : T
|
||||
>args : T
|
||||
>T : T
|
||||
>T : T
|
||||
|
||||
f20(...t1);
|
||||
>f20(...t1) : [number, string, ...boolean[]]
|
||||
>f20 : <T extends unknown[]>(...args: T) => T
|
||||
>...t1 : string | number | boolean
|
||||
>t1 : [number, string, ...boolean[]]
|
||||
|
||||
f20(42, ...t2);
|
||||
>f20(42, ...t2) : [number, string, ...boolean[]]
|
||||
>f20 : <T extends unknown[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>...t2 : string | boolean
|
||||
>t2 : [string, ...boolean[]]
|
||||
|
||||
f20(42, "hello", ...t3);
|
||||
>f20(42, "hello", ...t3) : [number, string, ...boolean[]]
|
||||
>f20 : <T extends unknown[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>...t3 : boolean
|
||||
>t3 : boolean[]
|
||||
|
||||
f20(42, "hello", ...t2, true);
|
||||
>f20(42, "hello", ...t2, true) : [number, string, ...(string | boolean)[]]
|
||||
>f20 : <T extends unknown[]>(...args: T) => T
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
>...t2 : string | boolean
|
||||
>t2 : [string, ...boolean[]]
|
||||
>true : true
|
||||
|
||||
type Parameters<T extends Function> = T extends ((...args: infer U) => any) | (new(...args: infer U) => any) ? U : any[];
|
||||
>Parameters : Parameters<T>
|
||||
>T : T
|
||||
>Function : Function
|
||||
>T : T
|
||||
>args : U
|
||||
>U : U
|
||||
>args : U
|
||||
>U : U
|
||||
>U : U
|
||||
|
||||
type T01 = Parameters<(x: number, y: string, ...z: boolean[]) => void>;
|
||||
>T01 : [number, string, ...boolean[]]
|
||||
>Parameters : Parameters<T>
|
||||
>x : number
|
||||
>y : string
|
||||
>z : boolean[]
|
||||
|
||||
type T02 = Parameters<(...args: [number, string, ...boolean[]]) => void>;
|
||||
>T02 : [number, string, ...boolean[]]
|
||||
>Parameters : Parameters<T>
|
||||
>args : [number, string, ...boolean[]]
|
||||
|
||||
type T03 = Parameters<new (x: number, y: string, ...z: boolean[]) => void>;
|
||||
>T03 : [number, string, ...boolean[]]
|
||||
>Parameters : Parameters<T>
|
||||
>x : number
|
||||
>y : string
|
||||
>z : boolean[]
|
||||
|
||||
type T04 = Parameters<new (...args: [number, string, ...boolean[]]) => void>;
|
||||
>T04 : [number, string, ...boolean[]]
|
||||
>Parameters : Parameters<T>
|
||||
>args : [number, string, ...boolean[]]
|
||||
|
||||
type T05<T extends any[]> = Parameters<(x: string, ...args: T) => void>;
|
||||
>T05 : Parameters<(x: string, ...args: T) => void>
|
||||
>T : T
|
||||
>Parameters : Parameters<T>
|
||||
>x : string
|
||||
>args : T
|
||||
>T : T
|
||||
|
||||
type T06 = T05<[number, ...boolean[]]>;
|
||||
>T06 : [string, number, ...boolean[]]
|
||||
>T05 : Parameters<(x: string, ...args: T) => void>
|
||||
|
||||
type P1<T extends Function> = T extends (head: infer A, ...tail: infer B) => any ? { head: A, tail: B } : any[];
|
||||
>P1 : P1<T>
|
||||
>T : T
|
||||
>Function : Function
|
||||
>T : T
|
||||
>head : A
|
||||
>A : A
|
||||
>tail : B
|
||||
>B : B
|
||||
>head : A
|
||||
>A : A
|
||||
>tail : B
|
||||
>B : B
|
||||
|
||||
type T10 = P1<(x: number, y: string, ...z: boolean[]) => void>;
|
||||
>T10 : { head: number; tail: [string, ...boolean[]]; }
|
||||
>P1 : P1<T>
|
||||
>x : number
|
||||
>y : string
|
||||
>z : boolean[]
|
||||
|
||||
type T11 = P1<(...z: number[]) => void>;
|
||||
>T11 : { head: number; tail: number[]; }
|
||||
>P1 : P1<T>
|
||||
>z : number[]
|
||||
|
||||
type T12 = P1<(x: number, y: number) => void>;
|
||||
>T12 : { head: number; tail: [number]; }
|
||||
>P1 : P1<T>
|
||||
>x : number
|
||||
>y : number
|
||||
|
||||
@@ -3,13 +3,13 @@ const [, a = ''] = ''.match('') || [];
|
||||
> : undefined
|
||||
>a : string
|
||||
>'' : ""
|
||||
>''.match('') || [] : RegExpMatchArray | [undefined, ""]
|
||||
>''.match('') || [] : RegExpMatchArray
|
||||
>''.match('') : RegExpMatchArray
|
||||
>''.match : (regexp: string | RegExp) => RegExpMatchArray
|
||||
>'' : ""
|
||||
>match : (regexp: string | RegExp) => RegExpMatchArray
|
||||
>'' : ""
|
||||
>[] : [undefined, ""]
|
||||
>[] : [undefined?, ""?]
|
||||
|
||||
a.toFixed()
|
||||
>a.toFixed() : any
|
||||
|
||||
@@ -0,0 +1,25 @@
|
||||
tests/cases/conformance/es6/destructuring/iterableArrayPattern13.ts(17,5): error TS2345: Argument of type 'FooIterator' is not assignable to parameter of type '[any, ...any[]]'.
|
||||
Property '0' is missing in type 'FooIterator'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/es6/destructuring/iterableArrayPattern13.ts (1 errors) ====
|
||||
class Bar { x }
|
||||
class Foo extends Bar { y }
|
||||
class FooIterator {
|
||||
next() {
|
||||
return {
|
||||
value: new Foo,
|
||||
done: false
|
||||
};
|
||||
}
|
||||
|
||||
[Symbol.iterator]() {
|
||||
return this;
|
||||
}
|
||||
}
|
||||
|
||||
function fun([a, ...b]) { }
|
||||
fun(new FooIterator);
|
||||
~~~~~~~~~~~~~~~
|
||||
!!! error TS2345: Argument of type 'FooIterator' is not assignable to parameter of type '[any, ...any[]]'.
|
||||
!!! error TS2345: Property '0' is missing in type 'FooIterator'.
|
||||
@@ -41,13 +41,13 @@ class FooIterator {
|
||||
}
|
||||
|
||||
function fun([a, ...b]) { }
|
||||
>fun : ([a, ...b]: Iterable<any>) => void
|
||||
>fun : ([a, ...b]: [any, ...any[]]) => void
|
||||
>a : any
|
||||
>b : any[]
|
||||
|
||||
fun(new FooIterator);
|
||||
>fun(new FooIterator) : void
|
||||
>fun : ([a, ...b]: Iterable<any>) => void
|
||||
>fun : ([a, ...b]: [any, ...any[]]) => void
|
||||
>new FooIterator : FooIterator
|
||||
>FooIterator : typeof FooIterator
|
||||
|
||||
|
||||
@@ -41,13 +41,13 @@ class FooIterator {
|
||||
}
|
||||
|
||||
function fun(...[a, ...b]) { }
|
||||
>fun : (...[a, ...b]: Iterable<any>) => void
|
||||
>fun : (__0_0: any, ...__0_1: any[]) => void
|
||||
>a : any
|
||||
>b : any[]
|
||||
|
||||
fun(new FooIterator);
|
||||
>fun(new FooIterator) : void
|
||||
>fun : (...[a, ...b]: Iterable<any>) => void
|
||||
>fun : (__0_0: any, ...__0_1: any[]) => void
|
||||
>new FooIterator : FooIterator
|
||||
>FooIterator : typeof FooIterator
|
||||
|
||||
|
||||
@@ -5,7 +5,7 @@ var a: string, b: boolean[];
|
||||
|
||||
[a, ...b] = { 0: "", 1: true };
|
||||
>[a, ...b] = { 0: "", 1: true } : { 0: string; 1: true; }
|
||||
>[a, ...b] : (string | boolean)[]
|
||||
>[a, ...b] : [string, ...boolean[]]
|
||||
>a : string
|
||||
>...b : boolean
|
||||
>b : boolean[]
|
||||
|
||||
@@ -1,8 +1,11 @@
|
||||
tests/cases/conformance/es6/destructuring/iterableArrayPattern25.ts(1,33): error TS2501: A rest element cannot contain a binding pattern.
|
||||
tests/cases/conformance/es6/destructuring/iterableArrayPattern25.ts(2,1): error TS2554: Expected 2 arguments, but got 1.
|
||||
|
||||
|
||||
==== tests/cases/conformance/es6/destructuring/iterableArrayPattern25.ts (1 errors) ====
|
||||
==== tests/cases/conformance/es6/destructuring/iterableArrayPattern25.ts (2 errors) ====
|
||||
function takeFirstTwoEntries(...[[k1, v1], [k2, v2]]) { }
|
||||
~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2501: A rest element cannot contain a binding pattern.
|
||||
takeFirstTwoEntries(new Map([["", 0], ["hello", 1]]));
|
||||
takeFirstTwoEntries(new Map([["", 0], ["hello", 1]]));
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2554: Expected 2 arguments, but got 1.
|
||||
@@ -1,6 +1,6 @@
|
||||
=== tests/cases/conformance/es6/destructuring/iterableArrayPattern25.ts ===
|
||||
function takeFirstTwoEntries(...[[k1, v1], [k2, v2]]) { }
|
||||
>takeFirstTwoEntries : (...[[k1, v1], [k2, v2]]: [[any, any], [any, any]]) => void
|
||||
>takeFirstTwoEntries : (__0_0: [any, any], __0_1: [any, any]) => void
|
||||
>k1 : any
|
||||
>v1 : any
|
||||
>k2 : any
|
||||
@@ -8,7 +8,7 @@ function takeFirstTwoEntries(...[[k1, v1], [k2, v2]]) { }
|
||||
|
||||
takeFirstTwoEntries(new Map([["", 0], ["hello", 1]]));
|
||||
>takeFirstTwoEntries(new Map([["", 0], ["hello", 1]])) : void
|
||||
>takeFirstTwoEntries : (...[[k1, v1], [k2, v2]]: [[any, any], [any, any]]) => void
|
||||
>takeFirstTwoEntries : (__0_0: [any, any], __0_1: [any, any]) => void
|
||||
>new Map([["", 0], ["hello", 1]]) : Map<string, number>
|
||||
>Map : MapConstructor
|
||||
>[["", 0], ["hello", 1]] : [string, number][]
|
||||
|
||||
@@ -48,7 +48,7 @@ var a: Bar, b: Bar[];
|
||||
|
||||
[a, ...b] = new FooIterator
|
||||
>[a, ...b] = new FooIterator : FooIterator
|
||||
>[a, ...b] : Bar[]
|
||||
>[a, ...b] : [Bar, ...Bar[]]
|
||||
>a : Bar
|
||||
>...b : Bar
|
||||
>b : Bar[]
|
||||
|
||||
@@ -47,7 +47,7 @@ var a: Bar, b: string[];
|
||||
|
||||
[a, ...b] = new FooIterator;
|
||||
>[a, ...b] = new FooIterator : FooIterator
|
||||
>[a, ...b] : (string | Bar)[]
|
||||
>[a, ...b] : [Bar, ...string[]]
|
||||
>a : Bar
|
||||
>...b : string
|
||||
>b : string[]
|
||||
|
||||
@@ -47,7 +47,7 @@ var a: Bar, b: string;
|
||||
|
||||
[a, ...b] = new FooIterator;
|
||||
>[a, ...b] = new FooIterator : FooIterator
|
||||
>[a, ...b] : (string | Bar)[]
|
||||
>[a, ...b] : [Bar, ...string[]]
|
||||
>a : Bar
|
||||
>...b : string
|
||||
>b : string
|
||||
|
||||
@@ -15,7 +15,6 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(35,21): error
|
||||
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(36,21): error TS2538: Type 'boolean' cannot be used as an index type.
|
||||
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(41,31): error TS2538: Type 'boolean' cannot be used as an index type.
|
||||
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(46,16): error TS2538: Type 'boolean' cannot be used as an index type.
|
||||
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(49,12): error TS1122: A tuple type element list cannot be empty.
|
||||
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(63,33): error TS2345: Argument of type '"size"' is not assignable to parameter of type '"name" | "width" | "height" | "visible"'.
|
||||
tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(64,33): error TS2345: Argument of type '"name" | "size"' is not assignable to parameter of type '"name" | "width" | "height" | "visible"'.
|
||||
Type '"size"' is not assignable to type '"name" | "width" | "height" | "visible"'.
|
||||
@@ -61,7 +60,7 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(117,5): error
|
||||
Type 'T' is not assignable to type 'U'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts (34 errors) ====
|
||||
==== tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts (33 errors) ====
|
||||
class Shape {
|
||||
name: string;
|
||||
width: number;
|
||||
@@ -145,8 +144,6 @@ tests/cases/conformance/types/keyof/keyofAndIndexedAccessErrors.ts(117,5): error
|
||||
|
||||
type T60 = {}["toString"];
|
||||
type T61 = []["toString"];
|
||||
~~
|
||||
!!! error TS1122: A tuple type element list cannot be empty.
|
||||
|
||||
declare let cond: boolean;
|
||||
|
||||
|
||||
@@ -7,7 +7,7 @@ function f1([a], {b}, c, d) { // error
|
||||
>d : any
|
||||
}
|
||||
function f2([a = undefined], {b = null}, c = undefined, d = null) { // error
|
||||
>f2 : ([a]: [any], { b }: { b?: any; }, c?: any, d?: any) => void
|
||||
>f2 : ([a]: [any?], { b }: { b?: any; }, c?: any, d?: any) => void
|
||||
>a : any
|
||||
>undefined : undefined
|
||||
>b : any
|
||||
|
||||
@@ -44,5 +44,5 @@ var [a4] = [undefined], {b4} = { b4: null }, c4 = undefined, d4 = null; // error
|
||||
var [a5 = undefined] = []; // error
|
||||
>a5 : any
|
||||
>undefined : undefined
|
||||
>[] : [undefined]
|
||||
>[] : [undefined?]
|
||||
|
||||
|
||||
@@ -59,9 +59,9 @@ var { a: [{ ...nested2 }, ...y], b: { z, ...c }, ...rest2 } = overEmit;
|
||||
({ a: [{ ...nested2 }, ...y], b: { z, ...c }, ...rest2 } = overEmit);
|
||||
>({ a: [{ ...nested2 }, ...y], b: { z, ...c }, ...rest2 } = overEmit) : { a: { ka: string; x: string; }[]; b: { z: string; ki: string; ku: string; }; ke: string; ko: string; }
|
||||
>{ a: [{ ...nested2 }, ...y], b: { z, ...c }, ...rest2 } = overEmit : { a: { ka: string; x: string; }[]; b: { z: string; ki: string; ku: string; }; ke: string; ko: string; }
|
||||
>{ a: [{ ...nested2 }, ...y], b: { z, ...c }, ...rest2 } : { ke: string; ko: string; a: { ka: string; x: string; }[]; b: { ki: string; ku: string; z: string; }; }
|
||||
>a : { ka: string; x: string; }[]
|
||||
>[{ ...nested2 }, ...y] : { ka: string; x: string; }[]
|
||||
>{ a: [{ ...nested2 }, ...y], b: { z, ...c }, ...rest2 } : { ke: string; ko: string; a: [{ ka: string; x: string; }, ...{ ka: string; x: string; }[]]; b: { ki: string; ku: string; z: string; }; }
|
||||
>a : [{ ka: string; x: string; }, ...{ ka: string; x: string; }[]]
|
||||
>[{ ...nested2 }, ...y] : [{ ka: string; x: string; }, ...{ ka: string; x: string; }[]]
|
||||
>{ ...nested2 } : { ka: string; x: string; }
|
||||
>nested2 : { ka: string; x: string; }
|
||||
>...y : { ka: string; x: string; }
|
||||
|
||||
@@ -0,0 +1,105 @@
|
||||
tests/cases/conformance/types/tuple/optionalTupleElements1.ts(11,29): error TS1257: A required element cannot follow an optional element.
|
||||
tests/cases/conformance/types/tuple/optionalTupleElements1.ts(15,5): error TS2322: Type '[number, string, (boolean | undefined)?]' is not assignable to type '[number, string, boolean]'.
|
||||
Types of property '2' are incompatible.
|
||||
Type 'boolean | undefined' is not assignable to type 'boolean'.
|
||||
Type 'undefined' is not assignable to type 'boolean'.
|
||||
tests/cases/conformance/types/tuple/optionalTupleElements1.ts(16,5): error TS2322: Type '[number, (string | undefined)?, (boolean | undefined)?]' is not assignable to type '[number, string, boolean]'.
|
||||
Types of property '1' are incompatible.
|
||||
Type 'string | undefined' is not assignable to type 'string'.
|
||||
Type 'undefined' is not assignable to type 'string'.
|
||||
tests/cases/conformance/types/tuple/optionalTupleElements1.ts(17,5): error TS2322: Type '[(number | undefined)?, (string | undefined)?, (boolean | undefined)?]' is not assignable to type '[number, string, boolean]'.
|
||||
Types of property '0' are incompatible.
|
||||
Type 'number | undefined' is not assignable to type 'number'.
|
||||
Type 'undefined' is not assignable to type 'number'.
|
||||
tests/cases/conformance/types/tuple/optionalTupleElements1.ts(20,5): error TS2322: Type '[number, (string | undefined)?, (boolean | undefined)?]' is not assignable to type '[number, string, (boolean | undefined)?]'.
|
||||
Types of property '1' are incompatible.
|
||||
Type 'string | undefined' is not assignable to type 'string'.
|
||||
Type 'undefined' is not assignable to type 'string'.
|
||||
tests/cases/conformance/types/tuple/optionalTupleElements1.ts(21,5): error TS2322: Type '[(number | undefined)?, (string | undefined)?, (boolean | undefined)?]' is not assignable to type '[number, string, (boolean | undefined)?]'.
|
||||
Types of property '0' are incompatible.
|
||||
Type 'number | undefined' is not assignable to type 'number'.
|
||||
Type 'undefined' is not assignable to type 'number'.
|
||||
tests/cases/conformance/types/tuple/optionalTupleElements1.ts(25,5): error TS2322: Type '[(number | undefined)?, (string | undefined)?, (boolean | undefined)?]' is not assignable to type '[number, (string | undefined)?, (boolean | undefined)?]'.
|
||||
Types of property '0' are incompatible.
|
||||
Type 'number | undefined' is not assignable to type 'number'.
|
||||
Type 'undefined' is not assignable to type 'number'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/types/tuple/optionalTupleElements1.ts (7 errors) ====
|
||||
type T1 = [number, string, boolean];
|
||||
type T2 = [number, string, boolean?];
|
||||
type T3 = [number, string?, boolean?];
|
||||
type T4 = [number?, string?, boolean?];
|
||||
|
||||
type L1 = T1["length"];
|
||||
type L2 = T2["length"];
|
||||
type L3 = T3["length"];
|
||||
type L4 = T4["length"];
|
||||
|
||||
type T5 = [number, string?, boolean]; // Error
|
||||
~~~~~~~
|
||||
!!! error TS1257: A required element cannot follow an optional element.
|
||||
|
||||
function f1(t1: T1, t2: T2, t3: T3, t4: T4) {
|
||||
t1 = t1;
|
||||
t1 = t2; // Error
|
||||
~~
|
||||
!!! error TS2322: Type '[number, string, (boolean | undefined)?]' is not assignable to type '[number, string, boolean]'.
|
||||
!!! error TS2322: Types of property '2' are incompatible.
|
||||
!!! error TS2322: Type 'boolean | undefined' is not assignable to type 'boolean'.
|
||||
!!! error TS2322: Type 'undefined' is not assignable to type 'boolean'.
|
||||
t1 = t3; // Error
|
||||
~~
|
||||
!!! error TS2322: Type '[number, (string | undefined)?, (boolean | undefined)?]' is not assignable to type '[number, string, boolean]'.
|
||||
!!! error TS2322: Types of property '1' are incompatible.
|
||||
!!! error TS2322: Type 'string | undefined' is not assignable to type 'string'.
|
||||
!!! error TS2322: Type 'undefined' is not assignable to type 'string'.
|
||||
t1 = t4; // Error
|
||||
~~
|
||||
!!! error TS2322: Type '[(number | undefined)?, (string | undefined)?, (boolean | undefined)?]' is not assignable to type '[number, string, boolean]'.
|
||||
!!! error TS2322: Types of property '0' are incompatible.
|
||||
!!! error TS2322: Type 'number | undefined' is not assignable to type 'number'.
|
||||
!!! error TS2322: Type 'undefined' is not assignable to type 'number'.
|
||||
t2 = t1;
|
||||
t2 = t2;
|
||||
t2 = t3; // Error
|
||||
~~
|
||||
!!! error TS2322: Type '[number, (string | undefined)?, (boolean | undefined)?]' is not assignable to type '[number, string, (boolean | undefined)?]'.
|
||||
!!! error TS2322: Types of property '1' are incompatible.
|
||||
!!! error TS2322: Type 'string | undefined' is not assignable to type 'string'.
|
||||
!!! error TS2322: Type 'undefined' is not assignable to type 'string'.
|
||||
t2 = t4; // Error
|
||||
~~
|
||||
!!! error TS2322: Type '[(number | undefined)?, (string | undefined)?, (boolean | undefined)?]' is not assignable to type '[number, string, (boolean | undefined)?]'.
|
||||
!!! error TS2322: Types of property '0' are incompatible.
|
||||
!!! error TS2322: Type 'number | undefined' is not assignable to type 'number'.
|
||||
!!! error TS2322: Type 'undefined' is not assignable to type 'number'.
|
||||
t3 = t1;
|
||||
t3 = t2;
|
||||
t3 = t3;
|
||||
t3 = t4; // Error
|
||||
~~
|
||||
!!! error TS2322: Type '[(number | undefined)?, (string | undefined)?, (boolean | undefined)?]' is not assignable to type '[number, (string | undefined)?, (boolean | undefined)?]'.
|
||||
!!! error TS2322: Types of property '0' are incompatible.
|
||||
!!! error TS2322: Type 'number | undefined' is not assignable to type 'number'.
|
||||
!!! error TS2322: Type 'undefined' is not assignable to type 'number'.
|
||||
t4 = t1;
|
||||
t4 = t2;
|
||||
t4 = t3;
|
||||
t4 = t4;
|
||||
}
|
||||
|
||||
let t2: T2;
|
||||
let t3: T3;
|
||||
let t4: T4;
|
||||
|
||||
t2 = [42, "hello"];
|
||||
t3 = [42, "hello"];
|
||||
t3 = [42,,true]
|
||||
t3 = [42];
|
||||
t4 = [42, "hello"];
|
||||
t4 = [42,,true];
|
||||
t4 = [,"hello", true];
|
||||
t4 = [,,true];
|
||||
t4 = [];
|
||||
|
||||
@@ -0,0 +1,95 @@
|
||||
//// [optionalTupleElements1.ts]
|
||||
type T1 = [number, string, boolean];
|
||||
type T2 = [number, string, boolean?];
|
||||
type T3 = [number, string?, boolean?];
|
||||
type T4 = [number?, string?, boolean?];
|
||||
|
||||
type L1 = T1["length"];
|
||||
type L2 = T2["length"];
|
||||
type L3 = T3["length"];
|
||||
type L4 = T4["length"];
|
||||
|
||||
type T5 = [number, string?, boolean]; // Error
|
||||
|
||||
function f1(t1: T1, t2: T2, t3: T3, t4: T4) {
|
||||
t1 = t1;
|
||||
t1 = t2; // Error
|
||||
t1 = t3; // Error
|
||||
t1 = t4; // Error
|
||||
t2 = t1;
|
||||
t2 = t2;
|
||||
t2 = t3; // Error
|
||||
t2 = t4; // Error
|
||||
t3 = t1;
|
||||
t3 = t2;
|
||||
t3 = t3;
|
||||
t3 = t4; // Error
|
||||
t4 = t1;
|
||||
t4 = t2;
|
||||
t4 = t3;
|
||||
t4 = t4;
|
||||
}
|
||||
|
||||
let t2: T2;
|
||||
let t3: T3;
|
||||
let t4: T4;
|
||||
|
||||
t2 = [42, "hello"];
|
||||
t3 = [42, "hello"];
|
||||
t3 = [42,,true]
|
||||
t3 = [42];
|
||||
t4 = [42, "hello"];
|
||||
t4 = [42,,true];
|
||||
t4 = [,"hello", true];
|
||||
t4 = [,,true];
|
||||
t4 = [];
|
||||
|
||||
|
||||
//// [optionalTupleElements1.js]
|
||||
"use strict";
|
||||
function f1(t1, t2, t3, t4) {
|
||||
t1 = t1;
|
||||
t1 = t2; // Error
|
||||
t1 = t3; // Error
|
||||
t1 = t4; // Error
|
||||
t2 = t1;
|
||||
t2 = t2;
|
||||
t2 = t3; // Error
|
||||
t2 = t4; // Error
|
||||
t3 = t1;
|
||||
t3 = t2;
|
||||
t3 = t3;
|
||||
t3 = t4; // Error
|
||||
t4 = t1;
|
||||
t4 = t2;
|
||||
t4 = t3;
|
||||
t4 = t4;
|
||||
}
|
||||
var t2;
|
||||
var t3;
|
||||
var t4;
|
||||
t2 = [42, "hello"];
|
||||
t3 = [42, "hello"];
|
||||
t3 = [42, , true];
|
||||
t3 = [42];
|
||||
t4 = [42, "hello"];
|
||||
t4 = [42, , true];
|
||||
t4 = [, "hello", true];
|
||||
t4 = [, , true];
|
||||
t4 = [];
|
||||
|
||||
|
||||
//// [optionalTupleElements1.d.ts]
|
||||
declare type T1 = [number, string, boolean];
|
||||
declare type T2 = [number, string, boolean?];
|
||||
declare type T3 = [number, string?, boolean?];
|
||||
declare type T4 = [number?, string?, boolean?];
|
||||
declare type L1 = T1["length"];
|
||||
declare type L2 = T2["length"];
|
||||
declare type L3 = T3["length"];
|
||||
declare type L4 = T4["length"];
|
||||
declare type T5 = [number, string?, boolean];
|
||||
declare function f1(t1: T1, t2: T2, t3: T3, t4: T4): void;
|
||||
declare let t2: T2;
|
||||
declare let t3: T3;
|
||||
declare let t4: T4;
|
||||
@@ -0,0 +1,147 @@
|
||||
=== tests/cases/conformance/types/tuple/optionalTupleElements1.ts ===
|
||||
type T1 = [number, string, boolean];
|
||||
>T1 : Symbol(T1, Decl(optionalTupleElements1.ts, 0, 0))
|
||||
|
||||
type T2 = [number, string, boolean?];
|
||||
>T2 : Symbol(T2, Decl(optionalTupleElements1.ts, 0, 36))
|
||||
|
||||
type T3 = [number, string?, boolean?];
|
||||
>T3 : Symbol(T3, Decl(optionalTupleElements1.ts, 1, 37))
|
||||
|
||||
type T4 = [number?, string?, boolean?];
|
||||
>T4 : Symbol(T4, Decl(optionalTupleElements1.ts, 2, 38))
|
||||
|
||||
type L1 = T1["length"];
|
||||
>L1 : Symbol(L1, Decl(optionalTupleElements1.ts, 3, 39))
|
||||
>T1 : Symbol(T1, Decl(optionalTupleElements1.ts, 0, 0))
|
||||
|
||||
type L2 = T2["length"];
|
||||
>L2 : Symbol(L2, Decl(optionalTupleElements1.ts, 5, 23))
|
||||
>T2 : Symbol(T2, Decl(optionalTupleElements1.ts, 0, 36))
|
||||
|
||||
type L3 = T3["length"];
|
||||
>L3 : Symbol(L3, Decl(optionalTupleElements1.ts, 6, 23))
|
||||
>T3 : Symbol(T3, Decl(optionalTupleElements1.ts, 1, 37))
|
||||
|
||||
type L4 = T4["length"];
|
||||
>L4 : Symbol(L4, Decl(optionalTupleElements1.ts, 7, 23))
|
||||
>T4 : Symbol(T4, Decl(optionalTupleElements1.ts, 2, 38))
|
||||
|
||||
type T5 = [number, string?, boolean]; // Error
|
||||
>T5 : Symbol(T5, Decl(optionalTupleElements1.ts, 8, 23))
|
||||
|
||||
function f1(t1: T1, t2: T2, t3: T3, t4: T4) {
|
||||
>f1 : Symbol(f1, Decl(optionalTupleElements1.ts, 10, 37))
|
||||
>t1 : Symbol(t1, Decl(optionalTupleElements1.ts, 12, 12))
|
||||
>T1 : Symbol(T1, Decl(optionalTupleElements1.ts, 0, 0))
|
||||
>t2 : Symbol(t2, Decl(optionalTupleElements1.ts, 12, 19))
|
||||
>T2 : Symbol(T2, Decl(optionalTupleElements1.ts, 0, 36))
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 12, 27))
|
||||
>T3 : Symbol(T3, Decl(optionalTupleElements1.ts, 1, 37))
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 12, 35))
|
||||
>T4 : Symbol(T4, Decl(optionalTupleElements1.ts, 2, 38))
|
||||
|
||||
t1 = t1;
|
||||
>t1 : Symbol(t1, Decl(optionalTupleElements1.ts, 12, 12))
|
||||
>t1 : Symbol(t1, Decl(optionalTupleElements1.ts, 12, 12))
|
||||
|
||||
t1 = t2; // Error
|
||||
>t1 : Symbol(t1, Decl(optionalTupleElements1.ts, 12, 12))
|
||||
>t2 : Symbol(t2, Decl(optionalTupleElements1.ts, 12, 19))
|
||||
|
||||
t1 = t3; // Error
|
||||
>t1 : Symbol(t1, Decl(optionalTupleElements1.ts, 12, 12))
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 12, 27))
|
||||
|
||||
t1 = t4; // Error
|
||||
>t1 : Symbol(t1, Decl(optionalTupleElements1.ts, 12, 12))
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 12, 35))
|
||||
|
||||
t2 = t1;
|
||||
>t2 : Symbol(t2, Decl(optionalTupleElements1.ts, 12, 19))
|
||||
>t1 : Symbol(t1, Decl(optionalTupleElements1.ts, 12, 12))
|
||||
|
||||
t2 = t2;
|
||||
>t2 : Symbol(t2, Decl(optionalTupleElements1.ts, 12, 19))
|
||||
>t2 : Symbol(t2, Decl(optionalTupleElements1.ts, 12, 19))
|
||||
|
||||
t2 = t3; // Error
|
||||
>t2 : Symbol(t2, Decl(optionalTupleElements1.ts, 12, 19))
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 12, 27))
|
||||
|
||||
t2 = t4; // Error
|
||||
>t2 : Symbol(t2, Decl(optionalTupleElements1.ts, 12, 19))
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 12, 35))
|
||||
|
||||
t3 = t1;
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 12, 27))
|
||||
>t1 : Symbol(t1, Decl(optionalTupleElements1.ts, 12, 12))
|
||||
|
||||
t3 = t2;
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 12, 27))
|
||||
>t2 : Symbol(t2, Decl(optionalTupleElements1.ts, 12, 19))
|
||||
|
||||
t3 = t3;
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 12, 27))
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 12, 27))
|
||||
|
||||
t3 = t4; // Error
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 12, 27))
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 12, 35))
|
||||
|
||||
t4 = t1;
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 12, 35))
|
||||
>t1 : Symbol(t1, Decl(optionalTupleElements1.ts, 12, 12))
|
||||
|
||||
t4 = t2;
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 12, 35))
|
||||
>t2 : Symbol(t2, Decl(optionalTupleElements1.ts, 12, 19))
|
||||
|
||||
t4 = t3;
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 12, 35))
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 12, 27))
|
||||
|
||||
t4 = t4;
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 12, 35))
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 12, 35))
|
||||
}
|
||||
|
||||
let t2: T2;
|
||||
>t2 : Symbol(t2, Decl(optionalTupleElements1.ts, 31, 3))
|
||||
>T2 : Symbol(T2, Decl(optionalTupleElements1.ts, 0, 36))
|
||||
|
||||
let t3: T3;
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 32, 3))
|
||||
>T3 : Symbol(T3, Decl(optionalTupleElements1.ts, 1, 37))
|
||||
|
||||
let t4: T4;
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 33, 3))
|
||||
>T4 : Symbol(T4, Decl(optionalTupleElements1.ts, 2, 38))
|
||||
|
||||
t2 = [42, "hello"];
|
||||
>t2 : Symbol(t2, Decl(optionalTupleElements1.ts, 31, 3))
|
||||
|
||||
t3 = [42, "hello"];
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 32, 3))
|
||||
|
||||
t3 = [42,,true]
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 32, 3))
|
||||
|
||||
t3 = [42];
|
||||
>t3 : Symbol(t3, Decl(optionalTupleElements1.ts, 32, 3))
|
||||
|
||||
t4 = [42, "hello"];
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 33, 3))
|
||||
|
||||
t4 = [42,,true];
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 33, 3))
|
||||
|
||||
t4 = [,"hello", true];
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 33, 3))
|
||||
|
||||
t4 = [,,true];
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 33, 3))
|
||||
|
||||
t4 = [];
|
||||
>t4 : Symbol(t4, Decl(optionalTupleElements1.ts, 33, 3))
|
||||
|
||||
@@ -0,0 +1,200 @@
|
||||
=== tests/cases/conformance/types/tuple/optionalTupleElements1.ts ===
|
||||
type T1 = [number, string, boolean];
|
||||
>T1 : [number, string, boolean]
|
||||
|
||||
type T2 = [number, string, boolean?];
|
||||
>T2 : [number, string, (boolean | undefined)?]
|
||||
|
||||
type T3 = [number, string?, boolean?];
|
||||
>T3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
type T4 = [number?, string?, boolean?];
|
||||
>T4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
type L1 = T1["length"];
|
||||
>L1 : 3
|
||||
>T1 : [number, string, boolean]
|
||||
|
||||
type L2 = T2["length"];
|
||||
>L2 : 3 | 2
|
||||
>T2 : [number, string, (boolean | undefined)?]
|
||||
|
||||
type L3 = T3["length"];
|
||||
>L3 : 3 | 2 | 1
|
||||
>T3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
type L4 = T4["length"];
|
||||
>L4 : 0 | 3 | 2 | 1
|
||||
>T4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
type T5 = [number, string?, boolean]; // Error
|
||||
>T5 : [number, string | undefined, boolean]
|
||||
|
||||
function f1(t1: T1, t2: T2, t3: T3, t4: T4) {
|
||||
>f1 : (t1: [number, string, boolean], t2: [number, string, (boolean | undefined)?], t3: [number, (string | undefined)?, (boolean | undefined)?], t4: [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]) => void
|
||||
>t1 : [number, string, boolean]
|
||||
>T1 : [number, string, boolean]
|
||||
>t2 : [number, string, (boolean | undefined)?]
|
||||
>T2 : [number, string, (boolean | undefined)?]
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>T3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>T4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
t1 = t1;
|
||||
>t1 = t1 : [number, string, boolean]
|
||||
>t1 : [number, string, boolean]
|
||||
>t1 : [number, string, boolean]
|
||||
|
||||
t1 = t2; // Error
|
||||
>t1 = t2 : [number, string, (boolean | undefined)?]
|
||||
>t1 : [number, string, boolean]
|
||||
>t2 : [number, string, (boolean | undefined)?]
|
||||
|
||||
t1 = t3; // Error
|
||||
>t1 = t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>t1 : [number, string, boolean]
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
t1 = t4; // Error
|
||||
>t1 = t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>t1 : [number, string, boolean]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
t2 = t1;
|
||||
>t2 = t1 : [number, string, boolean]
|
||||
>t2 : [number, string, (boolean | undefined)?]
|
||||
>t1 : [number, string, boolean]
|
||||
|
||||
t2 = t2;
|
||||
>t2 = t2 : [number, string, (boolean | undefined)?]
|
||||
>t2 : [number, string, (boolean | undefined)?]
|
||||
>t2 : [number, string, (boolean | undefined)?]
|
||||
|
||||
t2 = t3; // Error
|
||||
>t2 = t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>t2 : [number, string, (boolean | undefined)?]
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
t2 = t4; // Error
|
||||
>t2 = t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>t2 : [number, string, (boolean | undefined)?]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
t3 = t1;
|
||||
>t3 = t1 : [number, string, boolean]
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>t1 : [number, string, boolean]
|
||||
|
||||
t3 = t2;
|
||||
>t3 = t2 : [number, string, (boolean | undefined)?]
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>t2 : [number, string, (boolean | undefined)?]
|
||||
|
||||
t3 = t3;
|
||||
>t3 = t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
t3 = t4; // Error
|
||||
>t3 = t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
t4 = t1;
|
||||
>t4 = t1 : [number, string, boolean]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>t1 : [number, string, boolean]
|
||||
|
||||
t4 = t2;
|
||||
>t4 = t2 : [number, string, (boolean | undefined)?]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>t2 : [number, string, (boolean | undefined)?]
|
||||
|
||||
t4 = t3;
|
||||
>t4 = t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
t4 = t4;
|
||||
>t4 = t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
}
|
||||
|
||||
let t2: T2;
|
||||
>t2 : [number, string, (boolean | undefined)?]
|
||||
>T2 : [number, string, (boolean | undefined)?]
|
||||
|
||||
let t3: T3;
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>T3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
let t4: T4;
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>T4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
|
||||
t2 = [42, "hello"];
|
||||
>t2 = [42, "hello"] : [number, string]
|
||||
>t2 : [number, string, (boolean | undefined)?]
|
||||
>[42, "hello"] : [number, string]
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
|
||||
t3 = [42, "hello"];
|
||||
>t3 = [42, "hello"] : [number, string]
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>[42, "hello"] : [number, string]
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
|
||||
t3 = [42,,true]
|
||||
>t3 = [42,,true] : [number, undefined, true]
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>[42,,true] : [number, undefined, true]
|
||||
>42 : 42
|
||||
> : undefined
|
||||
>true : true
|
||||
|
||||
t3 = [42];
|
||||
>t3 = [42] : [number]
|
||||
>t3 : [number, (string | undefined)?, (boolean | undefined)?]
|
||||
>[42] : [number]
|
||||
>42 : 42
|
||||
|
||||
t4 = [42, "hello"];
|
||||
>t4 = [42, "hello"] : [number, string]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>[42, "hello"] : [number, string]
|
||||
>42 : 42
|
||||
>"hello" : "hello"
|
||||
|
||||
t4 = [42,,true];
|
||||
>t4 = [42,,true] : [number, undefined, true]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>[42,,true] : [number, undefined, true]
|
||||
>42 : 42
|
||||
> : undefined
|
||||
>true : true
|
||||
|
||||
t4 = [,"hello", true];
|
||||
>t4 = [,"hello", true] : [undefined, string, true]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>[,"hello", true] : [undefined, string, true]
|
||||
> : undefined
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
t4 = [,,true];
|
||||
>t4 = [,,true] : [undefined, undefined, true]
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>[,,true] : [undefined, undefined, true]
|
||||
> : undefined
|
||||
> : undefined
|
||||
>true : true
|
||||
|
||||
t4 = [];
|
||||
>t4 = [] : []
|
||||
>t4 : [(number | undefined)?, (string | undefined)?, (boolean | undefined)?]
|
||||
>[] : []
|
||||
|
||||
@@ -1,13 +1,10 @@
|
||||
tests/cases/compiler/promiseEmptyTupleNoException.ts(1,38): error TS1122: A tuple type element list cannot be empty.
|
||||
tests/cases/compiler/promiseEmptyTupleNoException.ts(3,3): error TS2322: Type 'any[]' is not assignable to type '[]'.
|
||||
Types of property 'length' are incompatible.
|
||||
Type 'number' is not assignable to type '0'.
|
||||
|
||||
|
||||
==== tests/cases/compiler/promiseEmptyTupleNoException.ts (2 errors) ====
|
||||
==== tests/cases/compiler/promiseEmptyTupleNoException.ts (1 errors) ====
|
||||
export async function get(): Promise<[]> {
|
||||
~~
|
||||
!!! error TS1122: A tuple type element list cannot be empty.
|
||||
let emails = [];
|
||||
return emails;
|
||||
~~~~~~~~~~~~~~
|
||||
|
||||
@@ -49,7 +49,7 @@ for (let [v] of v) { }
|
||||
let [x2 = x2] = []
|
||||
>x2 : any
|
||||
>x2 : any
|
||||
>[] : [any]
|
||||
>[] : [any?]
|
||||
|
||||
let z0 = () => z0;
|
||||
>z0 : () => any
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
=== tests/cases/compiler/restParameterWithBindingPattern2.ts ===
|
||||
function a(...[a, b]) { }
|
||||
>a : (...[a, b]: [any, any]) => void
|
||||
>a : (__0_0: any, __0_1: any) => void
|
||||
>a : any
|
||||
>b : any
|
||||
|
||||
|
||||
@@ -0,0 +1,138 @@
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(3,22): error TS1257: A required element cannot follow an optional element.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(8,13): error TS1256: A rest element must be last in a tuple type.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(9,13): error TS2574: A rest element type must be an array type.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(10,13): error TS2574: A rest element type must be an array type.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(10,16): error TS8020: JSDoc types can only be used inside documentation comments.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(23,31): error TS2344: Type 'number[]' does not satisfy the constraint '[number, ...number[]]'.
|
||||
Property '0' is missing in type 'number[]'.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(24,31): error TS2344: Type '[]' does not satisfy the constraint '[number, ...number[]]'.
|
||||
Property '0' is missing in type '[]'.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(29,18): error TS2344: Type 'number[]' does not satisfy the constraint '[number]'.
|
||||
Property '0' is missing in type 'number[]'.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(30,18): error TS2344: Type '[number, ...number[]]' does not satisfy the constraint '[number]'.
|
||||
Types of property 'length' are incompatible.
|
||||
Type 'number' is not assignable to type '1'.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(32,31): error TS2344: Type '[number, ...string[]]' does not satisfy the constraint '[number, ...number[]]'.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(33,31): error TS2344: Type '[string, ...number[]]' does not satisfy the constraint '[number, ...number[]]'.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(34,31): error TS2344: Type '[number, number, string]' does not satisfy the constraint '[number, ...number[]]'.
|
||||
Property '2' is incompatible with rest element type.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(35,31): error TS2344: Type '[number, number, number, string]' does not satisfy the constraint '[number, ...number[]]'.
|
||||
Property '3' is incompatible with rest element type.
|
||||
Type 'string' is not assignable to type 'number'.
|
||||
tests/cases/conformance/types/tuple/restTupleElements1.ts(59,4): error TS2345: Argument of type '[]' is not assignable to parameter of type '[{}, ...{}[]]'.
|
||||
Property '0' is missing in type '[]'.
|
||||
|
||||
|
||||
==== tests/cases/conformance/types/tuple/restTupleElements1.ts (14 errors) ====
|
||||
type T00 = [string?];
|
||||
type T01 = [string, string?];
|
||||
type T02 = [string?, string]; // Error
|
||||
~~~~~~
|
||||
!!! error TS1257: A required element cannot follow an optional element.
|
||||
type T03 = [...string[]];
|
||||
type T04 = [...[...string[]]];
|
||||
type T05 = [...[...[...string[]]]];
|
||||
type T06 = [string, ...string[]];
|
||||
type T07 = [...string[], string]; // Error
|
||||
~~~~~~~~~~~
|
||||
!!! error TS1256: A rest element must be last in a tuple type.
|
||||
type T08 = [...string]; // Error
|
||||
~~~~~~~~~
|
||||
!!! error TS2574: A rest element type must be an array type.
|
||||
type T09 = [...string?]; // Error
|
||||
~~~~~~~~~~
|
||||
!!! error TS2574: A rest element type must be an array type.
|
||||
~~~~~~~
|
||||
!!! error TS8020: JSDoc types can only be used inside documentation comments.
|
||||
type T10 = [string, ...[...string[]]];
|
||||
type T11 = [string, ...[...[...string[]]]];
|
||||
|
||||
type T15 = [boolean, number, ...string[]];
|
||||
type L15 = T15["length"]; // number
|
||||
|
||||
declare function assign<T, S extends T>(): void;
|
||||
|
||||
assign<number[], [...number[]]>();
|
||||
assign<number[], [number, ...number[]]>();
|
||||
assign<[...number[]], number[]>();
|
||||
|
||||
assign<[number, ...number[]], number[]>(); // Error
|
||||
~~~~~~~~
|
||||
!!! error TS2344: Type 'number[]' does not satisfy the constraint '[number, ...number[]]'.
|
||||
!!! error TS2344: Property '0' is missing in type 'number[]'.
|
||||
assign<[number, ...number[]], []>(); // Error
|
||||
~~
|
||||
!!! error TS2344: Type '[]' does not satisfy the constraint '[number, ...number[]]'.
|
||||
!!! error TS2344: Property '0' is missing in type '[]'.
|
||||
assign<[number, ...number[]], [number]>();
|
||||
assign<[number, ...number[]], [number, number]>();
|
||||
assign<[number, ...number[]], [number, number, ...number[]]>();
|
||||
|
||||
assign<[number], [...number[]]>(); // Error
|
||||
~~~~~~~~~~~~~
|
||||
!!! error TS2344: Type 'number[]' does not satisfy the constraint '[number]'.
|
||||
!!! error TS2344: Property '0' is missing in type 'number[]'.
|
||||
assign<[number], [number, ...number[]]>(); // Error
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2344: Type '[number, ...number[]]' does not satisfy the constraint '[number]'.
|
||||
!!! error TS2344: Types of property 'length' are incompatible.
|
||||
!!! error TS2344: Type 'number' is not assignable to type '1'.
|
||||
|
||||
assign<[number, ...number[]], [number, ...string[]]>(); // Error
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2344: Type '[number, ...string[]]' does not satisfy the constraint '[number, ...number[]]'.
|
||||
!!! error TS2344: Type 'string' is not assignable to type 'number'.
|
||||
assign<[number, ...number[]], [string, ...number[]]>(); // Error
|
||||
~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2344: Type '[string, ...number[]]' does not satisfy the constraint '[number, ...number[]]'.
|
||||
!!! error TS2344: Type 'string' is not assignable to type 'number'.
|
||||
assign<[number, ...number[]], [number, number, string]>(); // Error
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2344: Type '[number, number, string]' does not satisfy the constraint '[number, ...number[]]'.
|
||||
!!! error TS2344: Property '2' is incompatible with rest element type.
|
||||
!!! error TS2344: Type 'string' is not assignable to type 'number'.
|
||||
assign<[number, ...number[]], [number, number, number, string]>(); // Error
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
!!! error TS2344: Type '[number, number, number, string]' does not satisfy the constraint '[number, ...number[]]'.
|
||||
!!! error TS2344: Property '3' is incompatible with rest element type.
|
||||
!!! error TS2344: Type 'string' is not assignable to type 'number'.
|
||||
|
||||
type T20 = [number, string, ...boolean[]];
|
||||
|
||||
type T21 = T20[0];
|
||||
type T22 = T20[0 | 1];
|
||||
type T23 = T20[0 | 1 | 2];
|
||||
type T24 = T20[0 | 1 | 2 | 3];
|
||||
type T25 = T20[1 | 2 | 3];
|
||||
type T26 = T20[2 | 3];
|
||||
type T27 = T20[3];
|
||||
type T28 = T20[number];
|
||||
|
||||
declare const t: T20;
|
||||
declare const x: number;
|
||||
|
||||
let e0 = t[0]; // number
|
||||
let e1 = t[1]; // string
|
||||
let e2 = t[2]; // boolean
|
||||
let e3 = t[3]; // boolean
|
||||
let ex = t[x]; // number | string | boolean
|
||||
|
||||
declare function f0<T, U>(x: [T, ...U[]]): [T, U];
|
||||
|
||||
f0([]); // Error
|
||||
~~
|
||||
!!! error TS2345: Argument of type '[]' is not assignable to parameter of type '[{}, ...{}[]]'.
|
||||
!!! error TS2345: Property '0' is missing in type '[]'.
|
||||
f0([1]);
|
||||
f0([1, 2, 3]);
|
||||
f0([1, "hello", true]);
|
||||
|
||||
declare function f1(a: [(x: number) => number, ...((x: string) => number)[]]): void;
|
||||
declare function f2(...a: [(x: number) => number, ...((x: string) => number)[]]): void;
|
||||
|
||||
f1([x => x * 2, x => x.length, x => x.charCodeAt(0)]);
|
||||
f2(x => x * 2, x => x.length, x => x.charCodeAt(0));
|
||||
|
||||
@@ -0,0 +1,135 @@
|
||||
//// [restTupleElements1.ts]
|
||||
type T00 = [string?];
|
||||
type T01 = [string, string?];
|
||||
type T02 = [string?, string]; // Error
|
||||
type T03 = [...string[]];
|
||||
type T04 = [...[...string[]]];
|
||||
type T05 = [...[...[...string[]]]];
|
||||
type T06 = [string, ...string[]];
|
||||
type T07 = [...string[], string]; // Error
|
||||
type T08 = [...string]; // Error
|
||||
type T09 = [...string?]; // Error
|
||||
type T10 = [string, ...[...string[]]];
|
||||
type T11 = [string, ...[...[...string[]]]];
|
||||
|
||||
type T15 = [boolean, number, ...string[]];
|
||||
type L15 = T15["length"]; // number
|
||||
|
||||
declare function assign<T, S extends T>(): void;
|
||||
|
||||
assign<number[], [...number[]]>();
|
||||
assign<number[], [number, ...number[]]>();
|
||||
assign<[...number[]], number[]>();
|
||||
|
||||
assign<[number, ...number[]], number[]>(); // Error
|
||||
assign<[number, ...number[]], []>(); // Error
|
||||
assign<[number, ...number[]], [number]>();
|
||||
assign<[number, ...number[]], [number, number]>();
|
||||
assign<[number, ...number[]], [number, number, ...number[]]>();
|
||||
|
||||
assign<[number], [...number[]]>(); // Error
|
||||
assign<[number], [number, ...number[]]>(); // Error
|
||||
|
||||
assign<[number, ...number[]], [number, ...string[]]>(); // Error
|
||||
assign<[number, ...number[]], [string, ...number[]]>(); // Error
|
||||
assign<[number, ...number[]], [number, number, string]>(); // Error
|
||||
assign<[number, ...number[]], [number, number, number, string]>(); // Error
|
||||
|
||||
type T20 = [number, string, ...boolean[]];
|
||||
|
||||
type T21 = T20[0];
|
||||
type T22 = T20[0 | 1];
|
||||
type T23 = T20[0 | 1 | 2];
|
||||
type T24 = T20[0 | 1 | 2 | 3];
|
||||
type T25 = T20[1 | 2 | 3];
|
||||
type T26 = T20[2 | 3];
|
||||
type T27 = T20[3];
|
||||
type T28 = T20[number];
|
||||
|
||||
declare const t: T20;
|
||||
declare const x: number;
|
||||
|
||||
let e0 = t[0]; // number
|
||||
let e1 = t[1]; // string
|
||||
let e2 = t[2]; // boolean
|
||||
let e3 = t[3]; // boolean
|
||||
let ex = t[x]; // number | string | boolean
|
||||
|
||||
declare function f0<T, U>(x: [T, ...U[]]): [T, U];
|
||||
|
||||
f0([]); // Error
|
||||
f0([1]);
|
||||
f0([1, 2, 3]);
|
||||
f0([1, "hello", true]);
|
||||
|
||||
declare function f1(a: [(x: number) => number, ...((x: string) => number)[]]): void;
|
||||
declare function f2(...a: [(x: number) => number, ...((x: string) => number)[]]): void;
|
||||
|
||||
f1([x => x * 2, x => x.length, x => x.charCodeAt(0)]);
|
||||
f2(x => x * 2, x => x.length, x => x.charCodeAt(0));
|
||||
|
||||
|
||||
//// [restTupleElements1.js]
|
||||
"use strict";
|
||||
assign();
|
||||
assign();
|
||||
assign();
|
||||
assign(); // Error
|
||||
assign(); // Error
|
||||
assign();
|
||||
assign();
|
||||
assign();
|
||||
assign(); // Error
|
||||
assign(); // Error
|
||||
assign(); // Error
|
||||
assign(); // Error
|
||||
assign(); // Error
|
||||
assign(); // Error
|
||||
var e0 = t[0]; // number
|
||||
var e1 = t[1]; // string
|
||||
var e2 = t[2]; // boolean
|
||||
var e3 = t[3]; // boolean
|
||||
var ex = t[x]; // number | string | boolean
|
||||
f0([]); // Error
|
||||
f0([1]);
|
||||
f0([1, 2, 3]);
|
||||
f0([1, "hello", true]);
|
||||
f1([function (x) { return x * 2; }, function (x) { return x.length; }, function (x) { return x.charCodeAt(0); }]);
|
||||
f2(function (x) { return x * 2; }, function (x) { return x.length; }, function (x) { return x.charCodeAt(0); });
|
||||
|
||||
|
||||
//// [restTupleElements1.d.ts]
|
||||
declare type T00 = [string?];
|
||||
declare type T01 = [string, string?];
|
||||
declare type T02 = [string?, string];
|
||||
declare type T03 = [...string[]];
|
||||
declare type T04 = [...[...string[]]];
|
||||
declare type T05 = [...[...[...string[]]]];
|
||||
declare type T06 = [string, ...string[]];
|
||||
declare type T07 = [...string[], string];
|
||||
declare type T08 = [...string];
|
||||
declare type T09 = [...?string];
|
||||
declare type T10 = [string, ...[...string[]]];
|
||||
declare type T11 = [string, ...[...[...string[]]]];
|
||||
declare type T15 = [boolean, number, ...string[]];
|
||||
declare type L15 = T15["length"];
|
||||
declare function assign<T, S extends T>(): void;
|
||||
declare type T20 = [number, string, ...boolean[]];
|
||||
declare type T21 = T20[0];
|
||||
declare type T22 = T20[0 | 1];
|
||||
declare type T23 = T20[0 | 1 | 2];
|
||||
declare type T24 = T20[0 | 1 | 2 | 3];
|
||||
declare type T25 = T20[1 | 2 | 3];
|
||||
declare type T26 = T20[2 | 3];
|
||||
declare type T27 = T20[3];
|
||||
declare type T28 = T20[number];
|
||||
declare const t: T20;
|
||||
declare const x: number;
|
||||
declare let e0: number;
|
||||
declare let e1: string;
|
||||
declare let e2: boolean;
|
||||
declare let e3: boolean;
|
||||
declare let ex: string | number | boolean;
|
||||
declare function f0<T, U>(x: [T, ...U[]]): [T, U];
|
||||
declare function f1(a: [(x: number) => number, ...((x: string) => number)[]]): void;
|
||||
declare function f2(...a: [(x: number) => number, ...((x: string) => number)[]]): void;
|
||||
@@ -0,0 +1,217 @@
|
||||
=== tests/cases/conformance/types/tuple/restTupleElements1.ts ===
|
||||
type T00 = [string?];
|
||||
>T00 : Symbol(T00, Decl(restTupleElements1.ts, 0, 0))
|
||||
|
||||
type T01 = [string, string?];
|
||||
>T01 : Symbol(T01, Decl(restTupleElements1.ts, 0, 21))
|
||||
|
||||
type T02 = [string?, string]; // Error
|
||||
>T02 : Symbol(T02, Decl(restTupleElements1.ts, 1, 29))
|
||||
|
||||
type T03 = [...string[]];
|
||||
>T03 : Symbol(T03, Decl(restTupleElements1.ts, 2, 29))
|
||||
|
||||
type T04 = [...[...string[]]];
|
||||
>T04 : Symbol(T04, Decl(restTupleElements1.ts, 3, 25))
|
||||
|
||||
type T05 = [...[...[...string[]]]];
|
||||
>T05 : Symbol(T05, Decl(restTupleElements1.ts, 4, 30))
|
||||
|
||||
type T06 = [string, ...string[]];
|
||||
>T06 : Symbol(T06, Decl(restTupleElements1.ts, 5, 35))
|
||||
|
||||
type T07 = [...string[], string]; // Error
|
||||
>T07 : Symbol(T07, Decl(restTupleElements1.ts, 6, 33))
|
||||
|
||||
type T08 = [...string]; // Error
|
||||
>T08 : Symbol(T08, Decl(restTupleElements1.ts, 7, 33))
|
||||
|
||||
type T09 = [...string?]; // Error
|
||||
>T09 : Symbol(T09, Decl(restTupleElements1.ts, 8, 23))
|
||||
|
||||
type T10 = [string, ...[...string[]]];
|
||||
>T10 : Symbol(T10, Decl(restTupleElements1.ts, 9, 24))
|
||||
|
||||
type T11 = [string, ...[...[...string[]]]];
|
||||
>T11 : Symbol(T11, Decl(restTupleElements1.ts, 10, 38))
|
||||
|
||||
type T15 = [boolean, number, ...string[]];
|
||||
>T15 : Symbol(T15, Decl(restTupleElements1.ts, 11, 43))
|
||||
|
||||
type L15 = T15["length"]; // number
|
||||
>L15 : Symbol(L15, Decl(restTupleElements1.ts, 13, 42))
|
||||
>T15 : Symbol(T15, Decl(restTupleElements1.ts, 11, 43))
|
||||
|
||||
declare function assign<T, S extends T>(): void;
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
>T : Symbol(T, Decl(restTupleElements1.ts, 16, 24))
|
||||
>S : Symbol(S, Decl(restTupleElements1.ts, 16, 26))
|
||||
>T : Symbol(T, Decl(restTupleElements1.ts, 16, 24))
|
||||
|
||||
assign<number[], [...number[]]>();
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<number[], [number, ...number[]]>();
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<[...number[]], number[]>();
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<[number, ...number[]], number[]>(); // Error
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<[number, ...number[]], []>(); // Error
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<[number, ...number[]], [number]>();
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<[number, ...number[]], [number, number]>();
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<[number, ...number[]], [number, number, ...number[]]>();
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<[number], [...number[]]>(); // Error
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<[number], [number, ...number[]]>(); // Error
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<[number, ...number[]], [number, ...string[]]>(); // Error
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<[number, ...number[]], [string, ...number[]]>(); // Error
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<[number, ...number[]], [number, number, string]>(); // Error
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
assign<[number, ...number[]], [number, number, number, string]>(); // Error
|
||||
>assign : Symbol(assign, Decl(restTupleElements1.ts, 14, 25))
|
||||
|
||||
type T20 = [number, string, ...boolean[]];
|
||||
>T20 : Symbol(T20, Decl(restTupleElements1.ts, 34, 66))
|
||||
|
||||
type T21 = T20[0];
|
||||
>T21 : Symbol(T21, Decl(restTupleElements1.ts, 36, 42))
|
||||
>T20 : Symbol(T20, Decl(restTupleElements1.ts, 34, 66))
|
||||
|
||||
type T22 = T20[0 | 1];
|
||||
>T22 : Symbol(T22, Decl(restTupleElements1.ts, 38, 18))
|
||||
>T20 : Symbol(T20, Decl(restTupleElements1.ts, 34, 66))
|
||||
|
||||
type T23 = T20[0 | 1 | 2];
|
||||
>T23 : Symbol(T23, Decl(restTupleElements1.ts, 39, 22))
|
||||
>T20 : Symbol(T20, Decl(restTupleElements1.ts, 34, 66))
|
||||
|
||||
type T24 = T20[0 | 1 | 2 | 3];
|
||||
>T24 : Symbol(T24, Decl(restTupleElements1.ts, 40, 26))
|
||||
>T20 : Symbol(T20, Decl(restTupleElements1.ts, 34, 66))
|
||||
|
||||
type T25 = T20[1 | 2 | 3];
|
||||
>T25 : Symbol(T25, Decl(restTupleElements1.ts, 41, 30))
|
||||
>T20 : Symbol(T20, Decl(restTupleElements1.ts, 34, 66))
|
||||
|
||||
type T26 = T20[2 | 3];
|
||||
>T26 : Symbol(T26, Decl(restTupleElements1.ts, 42, 26))
|
||||
>T20 : Symbol(T20, Decl(restTupleElements1.ts, 34, 66))
|
||||
|
||||
type T27 = T20[3];
|
||||
>T27 : Symbol(T27, Decl(restTupleElements1.ts, 43, 22))
|
||||
>T20 : Symbol(T20, Decl(restTupleElements1.ts, 34, 66))
|
||||
|
||||
type T28 = T20[number];
|
||||
>T28 : Symbol(T28, Decl(restTupleElements1.ts, 44, 18))
|
||||
>T20 : Symbol(T20, Decl(restTupleElements1.ts, 34, 66))
|
||||
|
||||
declare const t: T20;
|
||||
>t : Symbol(t, Decl(restTupleElements1.ts, 47, 13))
|
||||
>T20 : Symbol(T20, Decl(restTupleElements1.ts, 34, 66))
|
||||
|
||||
declare const x: number;
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 48, 13))
|
||||
|
||||
let e0 = t[0]; // number
|
||||
>e0 : Symbol(e0, Decl(restTupleElements1.ts, 50, 3))
|
||||
>t : Symbol(t, Decl(restTupleElements1.ts, 47, 13))
|
||||
>0 : Symbol(0)
|
||||
|
||||
let e1 = t[1]; // string
|
||||
>e1 : Symbol(e1, Decl(restTupleElements1.ts, 51, 3))
|
||||
>t : Symbol(t, Decl(restTupleElements1.ts, 47, 13))
|
||||
>1 : Symbol(1)
|
||||
|
||||
let e2 = t[2]; // boolean
|
||||
>e2 : Symbol(e2, Decl(restTupleElements1.ts, 52, 3))
|
||||
>t : Symbol(t, Decl(restTupleElements1.ts, 47, 13))
|
||||
|
||||
let e3 = t[3]; // boolean
|
||||
>e3 : Symbol(e3, Decl(restTupleElements1.ts, 53, 3))
|
||||
>t : Symbol(t, Decl(restTupleElements1.ts, 47, 13))
|
||||
|
||||
let ex = t[x]; // number | string | boolean
|
||||
>ex : Symbol(ex, Decl(restTupleElements1.ts, 54, 3))
|
||||
>t : Symbol(t, Decl(restTupleElements1.ts, 47, 13))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 48, 13))
|
||||
|
||||
declare function f0<T, U>(x: [T, ...U[]]): [T, U];
|
||||
>f0 : Symbol(f0, Decl(restTupleElements1.ts, 54, 14))
|
||||
>T : Symbol(T, Decl(restTupleElements1.ts, 56, 20))
|
||||
>U : Symbol(U, Decl(restTupleElements1.ts, 56, 22))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 56, 26))
|
||||
>T : Symbol(T, Decl(restTupleElements1.ts, 56, 20))
|
||||
>U : Symbol(U, Decl(restTupleElements1.ts, 56, 22))
|
||||
>T : Symbol(T, Decl(restTupleElements1.ts, 56, 20))
|
||||
>U : Symbol(U, Decl(restTupleElements1.ts, 56, 22))
|
||||
|
||||
f0([]); // Error
|
||||
>f0 : Symbol(f0, Decl(restTupleElements1.ts, 54, 14))
|
||||
|
||||
f0([1]);
|
||||
>f0 : Symbol(f0, Decl(restTupleElements1.ts, 54, 14))
|
||||
|
||||
f0([1, 2, 3]);
|
||||
>f0 : Symbol(f0, Decl(restTupleElements1.ts, 54, 14))
|
||||
|
||||
f0([1, "hello", true]);
|
||||
>f0 : Symbol(f0, Decl(restTupleElements1.ts, 54, 14))
|
||||
|
||||
declare function f1(a: [(x: number) => number, ...((x: string) => number)[]]): void;
|
||||
>f1 : Symbol(f1, Decl(restTupleElements1.ts, 61, 23))
|
||||
>a : Symbol(a, Decl(restTupleElements1.ts, 63, 20))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 63, 25))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 63, 52))
|
||||
|
||||
declare function f2(...a: [(x: number) => number, ...((x: string) => number)[]]): void;
|
||||
>f2 : Symbol(f2, Decl(restTupleElements1.ts, 63, 84))
|
||||
>a : Symbol(a, Decl(restTupleElements1.ts, 64, 20))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 64, 28))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 64, 55))
|
||||
|
||||
f1([x => x * 2, x => x.length, x => x.charCodeAt(0)]);
|
||||
>f1 : Symbol(f1, Decl(restTupleElements1.ts, 61, 23))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 66, 4))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 66, 4))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 66, 15))
|
||||
>x.length : Symbol(String.length, Decl(lib.es5.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 66, 15))
|
||||
>length : Symbol(String.length, Decl(lib.es5.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 66, 30))
|
||||
>x.charCodeAt : Symbol(String.charCodeAt, Decl(lib.es5.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 66, 30))
|
||||
>charCodeAt : Symbol(String.charCodeAt, Decl(lib.es5.d.ts, --, --))
|
||||
|
||||
f2(x => x * 2, x => x.length, x => x.charCodeAt(0));
|
||||
>f2 : Symbol(f2, Decl(restTupleElements1.ts, 63, 84))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 67, 3))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 67, 3))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 67, 14))
|
||||
>x.length : Symbol(String.length, Decl(lib.es5.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 67, 14))
|
||||
>length : Symbol(String.length, Decl(lib.es5.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 67, 29))
|
||||
>x.charCodeAt : Symbol(String.charCodeAt, Decl(lib.es5.d.ts, --, --))
|
||||
>x : Symbol(x, Decl(restTupleElements1.ts, 67, 29))
|
||||
>charCodeAt : Symbol(String.charCodeAt, Decl(lib.es5.d.ts, --, --))
|
||||
|
||||
@@ -0,0 +1,270 @@
|
||||
=== tests/cases/conformance/types/tuple/restTupleElements1.ts ===
|
||||
type T00 = [string?];
|
||||
>T00 : [(string | undefined)?]
|
||||
|
||||
type T01 = [string, string?];
|
||||
>T01 : [string, (string | undefined)?]
|
||||
|
||||
type T02 = [string?, string]; // Error
|
||||
>T02 : [string | undefined, string]
|
||||
|
||||
type T03 = [...string[]];
|
||||
>T03 : string[]
|
||||
|
||||
type T04 = [...[...string[]]];
|
||||
>T04 : string[]
|
||||
|
||||
type T05 = [...[...[...string[]]]];
|
||||
>T05 : string[]
|
||||
|
||||
type T06 = [string, ...string[]];
|
||||
>T06 : [string, ...string[]]
|
||||
|
||||
type T07 = [...string[], string]; // Error
|
||||
>T07 : [string[], string]
|
||||
|
||||
type T08 = [...string]; // Error
|
||||
>T08 : string[]
|
||||
|
||||
type T09 = [...string?]; // Error
|
||||
>T09 : (string | null)[]
|
||||
|
||||
type T10 = [string, ...[...string[]]];
|
||||
>T10 : [string, ...string[]]
|
||||
|
||||
type T11 = [string, ...[...[...string[]]]];
|
||||
>T11 : [string, ...string[]]
|
||||
|
||||
type T15 = [boolean, number, ...string[]];
|
||||
>T15 : [boolean, number, ...string[]]
|
||||
|
||||
type L15 = T15["length"]; // number
|
||||
>L15 : number
|
||||
>T15 : [boolean, number, ...string[]]
|
||||
|
||||
declare function assign<T, S extends T>(): void;
|
||||
>assign : <T, S extends T>() => void
|
||||
>T : T
|
||||
>S : S
|
||||
>T : T
|
||||
|
||||
assign<number[], [...number[]]>();
|
||||
>assign<number[], [...number[]]>() : void
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<number[], [number, ...number[]]>();
|
||||
>assign<number[], [number, ...number[]]>() : void
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<[...number[]], number[]>();
|
||||
>assign<[...number[]], number[]>() : void
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<[number, ...number[]], number[]>(); // Error
|
||||
>assign<[number, ...number[]], number[]>() : any
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<[number, ...number[]], []>(); // Error
|
||||
>assign<[number, ...number[]], []>() : any
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<[number, ...number[]], [number]>();
|
||||
>assign<[number, ...number[]], [number]>() : void
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<[number, ...number[]], [number, number]>();
|
||||
>assign<[number, ...number[]], [number, number]>() : void
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<[number, ...number[]], [number, number, ...number[]]>();
|
||||
>assign<[number, ...number[]], [number, number, ...number[]]>() : void
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<[number], [...number[]]>(); // Error
|
||||
>assign<[number], [...number[]]>() : any
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<[number], [number, ...number[]]>(); // Error
|
||||
>assign<[number], [number, ...number[]]>() : any
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<[number, ...number[]], [number, ...string[]]>(); // Error
|
||||
>assign<[number, ...number[]], [number, ...string[]]>() : any
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<[number, ...number[]], [string, ...number[]]>(); // Error
|
||||
>assign<[number, ...number[]], [string, ...number[]]>() : any
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<[number, ...number[]], [number, number, string]>(); // Error
|
||||
>assign<[number, ...number[]], [number, number, string]>() : any
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
assign<[number, ...number[]], [number, number, number, string]>(); // Error
|
||||
>assign<[number, ...number[]], [number, number, number, string]>() : any
|
||||
>assign : <T, S extends T>() => void
|
||||
|
||||
type T20 = [number, string, ...boolean[]];
|
||||
>T20 : [number, string, ...boolean[]]
|
||||
|
||||
type T21 = T20[0];
|
||||
>T21 : number
|
||||
>T20 : [number, string, ...boolean[]]
|
||||
|
||||
type T22 = T20[0 | 1];
|
||||
>T22 : string | number
|
||||
>T20 : [number, string, ...boolean[]]
|
||||
|
||||
type T23 = T20[0 | 1 | 2];
|
||||
>T23 : string | number | boolean
|
||||
>T20 : [number, string, ...boolean[]]
|
||||
|
||||
type T24 = T20[0 | 1 | 2 | 3];
|
||||
>T24 : string | number | boolean
|
||||
>T20 : [number, string, ...boolean[]]
|
||||
|
||||
type T25 = T20[1 | 2 | 3];
|
||||
>T25 : string | boolean
|
||||
>T20 : [number, string, ...boolean[]]
|
||||
|
||||
type T26 = T20[2 | 3];
|
||||
>T26 : boolean
|
||||
>T20 : [number, string, ...boolean[]]
|
||||
|
||||
type T27 = T20[3];
|
||||
>T27 : boolean
|
||||
>T20 : [number, string, ...boolean[]]
|
||||
|
||||
type T28 = T20[number];
|
||||
>T28 : string | number | boolean
|
||||
>T20 : [number, string, ...boolean[]]
|
||||
|
||||
declare const t: T20;
|
||||
>t : [number, string, ...boolean[]]
|
||||
>T20 : [number, string, ...boolean[]]
|
||||
|
||||
declare const x: number;
|
||||
>x : number
|
||||
|
||||
let e0 = t[0]; // number
|
||||
>e0 : number
|
||||
>t[0] : number
|
||||
>t : [number, string, ...boolean[]]
|
||||
>0 : 0
|
||||
|
||||
let e1 = t[1]; // string
|
||||
>e1 : string
|
||||
>t[1] : string
|
||||
>t : [number, string, ...boolean[]]
|
||||
>1 : 1
|
||||
|
||||
let e2 = t[2]; // boolean
|
||||
>e2 : boolean
|
||||
>t[2] : boolean
|
||||
>t : [number, string, ...boolean[]]
|
||||
>2 : 2
|
||||
|
||||
let e3 = t[3]; // boolean
|
||||
>e3 : boolean
|
||||
>t[3] : boolean
|
||||
>t : [number, string, ...boolean[]]
|
||||
>3 : 3
|
||||
|
||||
let ex = t[x]; // number | string | boolean
|
||||
>ex : string | number | boolean
|
||||
>t[x] : string | number | boolean
|
||||
>t : [number, string, ...boolean[]]
|
||||
>x : number
|
||||
|
||||
declare function f0<T, U>(x: [T, ...U[]]): [T, U];
|
||||
>f0 : <T, U>(x: [T, ...U[]]) => [T, U]
|
||||
>T : T
|
||||
>U : U
|
||||
>x : [T, ...U[]]
|
||||
>T : T
|
||||
>U : U
|
||||
>T : T
|
||||
>U : U
|
||||
|
||||
f0([]); // Error
|
||||
>f0([]) : any
|
||||
>f0 : <T, U>(x: [T, ...U[]]) => [T, U]
|
||||
>[] : never[]
|
||||
|
||||
f0([1]);
|
||||
>f0([1]) : [number, {}]
|
||||
>f0 : <T, U>(x: [T, ...U[]]) => [T, U]
|
||||
>[1] : [number]
|
||||
>1 : 1
|
||||
|
||||
f0([1, 2, 3]);
|
||||
>f0([1, 2, 3]) : [number, number]
|
||||
>f0 : <T, U>(x: [T, ...U[]]) => [T, U]
|
||||
>[1, 2, 3] : [number, number, number]
|
||||
>1 : 1
|
||||
>2 : 2
|
||||
>3 : 3
|
||||
|
||||
f0([1, "hello", true]);
|
||||
>f0([1, "hello", true]) : [number, string | boolean]
|
||||
>f0 : <T, U>(x: [T, ...U[]]) => [T, U]
|
||||
>[1, "hello", true] : [number, string, true]
|
||||
>1 : 1
|
||||
>"hello" : "hello"
|
||||
>true : true
|
||||
|
||||
declare function f1(a: [(x: number) => number, ...((x: string) => number)[]]): void;
|
||||
>f1 : (a: [(x: number) => number, ...((x: string) => number)[]]) => void
|
||||
>a : [(x: number) => number, ...((x: string) => number)[]]
|
||||
>x : number
|
||||
>x : string
|
||||
|
||||
declare function f2(...a: [(x: number) => number, ...((x: string) => number)[]]): void;
|
||||
>f2 : (a_0: (x: number) => number, ...a_1: ((x: string) => number)[]) => void
|
||||
>a : [(x: number) => number, ...((x: string) => number)[]]
|
||||
>x : number
|
||||
>x : string
|
||||
|
||||
f1([x => x * 2, x => x.length, x => x.charCodeAt(0)]);
|
||||
>f1([x => x * 2, x => x.length, x => x.charCodeAt(0)]) : void
|
||||
>f1 : (a: [(x: number) => number, ...((x: string) => number)[]]) => void
|
||||
>[x => x * 2, x => x.length, x => x.charCodeAt(0)] : [(x: number) => number, (x: string) => number, (x: string) => number]
|
||||
>x => x * 2 : (x: number) => number
|
||||
>x : number
|
||||
>x * 2 : number
|
||||
>x : number
|
||||
>2 : 2
|
||||
>x => x.length : (x: string) => number
|
||||
>x : string
|
||||
>x.length : number
|
||||
>x : string
|
||||
>length : number
|
||||
>x => x.charCodeAt(0) : (x: string) => number
|
||||
>x : string
|
||||
>x.charCodeAt(0) : number
|
||||
>x.charCodeAt : (index: number) => number
|
||||
>x : string
|
||||
>charCodeAt : (index: number) => number
|
||||
>0 : 0
|
||||
|
||||
f2(x => x * 2, x => x.length, x => x.charCodeAt(0));
|
||||
>f2(x => x * 2, x => x.length, x => x.charCodeAt(0)) : void
|
||||
>f2 : (a_0: (x: number) => number, ...a_1: ((x: string) => number)[]) => void
|
||||
>x => x * 2 : (x: number) => number
|
||||
>x : number
|
||||
>x * 2 : number
|
||||
>x : number
|
||||
>2 : 2
|
||||
>x => x.length : (x: string) => number
|
||||
>x : string
|
||||
>x.length : number
|
||||
>x : string
|
||||
>length : number
|
||||
>x => x.charCodeAt(0) : (x: string) => number
|
||||
>x : string
|
||||
>x.charCodeAt(0) : number
|
||||
>x.charCodeAt : (index: number) => number
|
||||
>x : string
|
||||
>charCodeAt : (index: number) => number
|
||||
>0 : 0
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user