From 3b1dbadb88b8d30c741c4a1cf482e46a64dfb5cc Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 11 Aug 2014 14:52:32 -0700 Subject: [PATCH] Addressing CR feedback, adding baselines. --- src/compiler/checker.ts | 7 +- .../baselines/reference/tupleTypes.errors.txt | 89 +++++++++++++++++++ .../baselines/reference/typeName1.errors.txt | 4 +- 3 files changed, 96 insertions(+), 4 deletions(-) create mode 100644 tests/baselines/reference/tupleTypes.errors.txt diff --git a/src/compiler/checker.ts b/src/compiler/checker.ts index 3e8cd2cd435..8a1b9872411 100644 --- a/src/compiler/checker.ts +++ b/src/compiler/checker.ts @@ -625,7 +625,8 @@ module ts { // } // // x is an optional parameter, but it is a required property. - return propertySymbol.valueDeclaration && propertySymbol.valueDeclaration.flags & NodeFlags.QuestionMark && + return propertySymbol.valueDeclaration && + propertySymbol.valueDeclaration.flags & NodeFlags.QuestionMark && propertySymbol.valueDeclaration.kind !== SyntaxKind.Parameter; } @@ -2069,7 +2070,7 @@ module ts { if (type.flags & (TypeFlags.Class | TypeFlags.Interface) && type.flags & TypeFlags.Reference) { var typeParameters = (type).typeParameters; if (node.typeArguments && node.typeArguments.length === typeParameters.length) { - type = createTypeReference(type, map(node.typeArguments, t => getTypeFromTypeNode(t))); + type = createTypeReference(type, map(node.typeArguments, getTypeFromTypeNode)); } else { error(node, Diagnostics.Generic_type_0_requires_1_type_argument_s, typeToString(type, /*enclosingDeclaration*/ undefined, TypeFormatFlags.WriteArrayAsGenericType), typeParameters.length); @@ -2168,7 +2169,7 @@ module ts { function getTypeFromTupleTypeNode(node: TupleTypeNode): Type { var links = getNodeLinks(node); if (!links.resolvedType) { - links.resolvedType = createTupleType(map(node.elementTypes, t => getTypeFromTypeNode(t))); + links.resolvedType = createTupleType(map(node.elementTypes, getTypeFromTypeNode)); } return links.resolvedType; } diff --git a/tests/baselines/reference/tupleTypes.errors.txt b/tests/baselines/reference/tupleTypes.errors.txt new file mode 100644 index 00000000000..b10a098b9a7 --- /dev/null +++ b/tests/baselines/reference/tupleTypes.errors.txt @@ -0,0 +1,89 @@ +==== tests/cases/compiler/tupleTypes.ts (9 errors) ==== + var v1: []; // Error + ~~ +!!! Type argument list cannot be empty. + var v2: [number]; + var v3: [number, string]; + var v4: [number, [string, string]]; + + var t: [number, string]; + var t0 = t[0]; // number + var t0: number; + var t1 = t[1]; // string + var t1: string; + var t2 = t[2]; // {} + var t2: {}; + + t = []; // Error + ~ +!!! Type '[]' is not assignable to type '[number, string]': +!!! Property '0' is missing in type '[]'. + t = [1]; // Error + ~ +!!! Type '[number]' is not assignable to type '[number, string]': +!!! Property '1' is missing in type '[number]'. + t = [1, "hello"]; // Ok + t = ["hello", 1]; // Error + ~ +!!! Type '[string, number]' is not assignable to type '[number, string]': +!!! Types of property '0' are incompatible: +!!! Type 'string' is not assignable to type 'number'. + t = [1, "hello", 2]; // Ok + + var tf: [string, (x: string) => number] = ["hello", x => x.length]; + + declare function ff(a: T, b: [T, (x: T) => U]): U; + var ff1 = ff("hello", ["foo", x => x.length]); + var ff1: number; + + function tuple2(item0: T0, item1: T1): [T0, T1]{ + return [item0, item1]; + } + + var tt = tuple2(1, "string"); + var tt0 = tt[0]; + var tt0: number; + var tt1 = tt[1]; + var tt1: string; + var tt2 = tt[2]; + var tt2: {}; + + tt = tuple2(1, undefined); + tt = [1, undefined]; + tt = [undefined, undefined]; + tt = []; // Error + ~~ +!!! Type '[]' is not assignable to type '[number, string]'. + + var a: number[]; + var a1: [number, string]; + var a2: [number, number]; + var a3: [number, {}]; + a = a1; // Error + ~ +!!! Type '[number, string]' is not assignable to type 'number[]': +!!! Types of property 'concat' are incompatible: +!!! Type '{ (...items: U[]): {}[]; (...items: {}[]): {}[]; }' is not assignable to type '{ (...items: U[]): number[]; (...items: number[]): number[]; }': +!!! Type '{}[]' is not assignable to type 'number[]': +!!! Type '{}' is not assignable to type 'number'. + a = a2; + a = a3; // Error + ~ +!!! Type '[number, {}]' is not assignable to type 'number[]': +!!! Types of property 'concat' are incompatible: +!!! Type '{ (...items: U[]): {}[]; (...items: {}[]): {}[]; }' is not assignable to type '{ (...items: U[]): number[]; (...items: number[]): number[]; }': +!!! Type '{}[]' is not assignable to type 'number[]': +!!! Type '{}' is not assignable to type 'number'. + a1 = a2; // Error + ~~ +!!! Type '[number, number]' is not assignable to type '[number, string]': +!!! Types of property '1' are incompatible: +!!! Type 'number' is not assignable to type 'string'. + a1 = a3; // Error + ~~ +!!! Type '[number, {}]' is not assignable to type '[number, string]': +!!! Types of property '1' are incompatible: +!!! Type '{}' is not assignable to type 'string'. + a3 = a1; + a3 = a2; + \ No newline at end of file diff --git a/tests/baselines/reference/typeName1.errors.txt b/tests/baselines/reference/typeName1.errors.txt index 26a744f7d2d..ac729f4724a 100644 --- a/tests/baselines/reference/typeName1.errors.txt +++ b/tests/baselines/reference/typeName1.errors.txt @@ -1,4 +1,4 @@ -==== tests/cases/compiler/typeName1.ts (16 errors) ==== +==== tests/cases/compiler/typeName1.ts (17 errors) ==== interface I { k; } @@ -55,6 +55,8 @@ ~~~ !!! Type 'number' is not assignable to type '{ z: I; x: boolean; y: (s: string) => boolean; w: { (): boolean; [x: string]: { x: any; y: any; }; [x: number]: { x: any; y: any; }; z: I; }; }[][]': !!! Property 'concat' is missing in type 'Number'. + ~~~~ +!!! Property 'z' of type 'I' is not assignable to string index type '{ x: any; y: any; }'. var x13:{ new(): number; new(n:number):number; x: string; w: {y: number;}; (): {}; } = 3; ~~~ !!! Type 'number' is not assignable to type '{ (): {}; new (): number; new (n: number): number; x: string; w: { y: number; }; }':