From c0db7ffe8f55b6ec335880482ca43b93b066689d Mon Sep 17 00:00:00 2001 From: Dick van den Brink Date: Sun, 8 Mar 2015 18:08:49 +0100 Subject: [PATCH 1/3] Added valueOf definitions for String and Number --- src/lib/core.d.ts | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/lib/core.d.ts b/src/lib/core.d.ts index cb5324fbd3d..bbaddeeacc1 100644 --- a/src/lib/core.d.ts +++ b/src/lib/core.d.ts @@ -410,6 +410,9 @@ interface String { */ substr(from: number, length?: number): string; + /** Returns the primitive value of the specified object. */ + valueOf(): string; + [index: number]: string; } @@ -462,6 +465,9 @@ interface Number { * @param precision Number of significant digits. Must be in the range 1 - 21, inclusive. */ toPrecision(precision?: number): string; + + /** Returns the primitive value of the specified object. */ + valueOf(): number; } interface NumberConstructor { From 23f56dadfb422e3c45d8ee15f4d587eed1959bf4 Mon Sep 17 00:00:00 2001 From: Dick van den Brink Date: Sun, 8 Mar 2015 18:59:04 +0100 Subject: [PATCH 2/3] Fixed tests due to lib.d.ts changes --- .../types/primitives/number/assignFromNumberInterface2.ts | 1 + .../types/primitives/string/assignFromStringInterface2.ts | 1 + .../stringLiteralTypeIsSubtypeOfString.ts | 1 + tests/cases/fourslash/completionEntryForUnionProperty2.ts | 3 ++- tests/cases/fourslash/completionListEnumMembers.ts | 2 +- tests/cases/fourslash/memberCompletionInForEach1.ts | 5 ++--- tests/cases/fourslash/server/completions.ts | 5 ++--- 7 files changed, 10 insertions(+), 8 deletions(-) diff --git a/tests/cases/conformance/types/primitives/number/assignFromNumberInterface2.ts b/tests/cases/conformance/types/primitives/number/assignFromNumberInterface2.ts index b516f7b864d..da7da7c7a06 100644 --- a/tests/cases/conformance/types/primitives/number/assignFromNumberInterface2.ts +++ b/tests/cases/conformance/types/primitives/number/assignFromNumberInterface2.ts @@ -7,6 +7,7 @@ interface NotNumber { toFixed(fractionDigits?: number): string; toExponential(fractionDigits?: number): string; toPrecision(precision?: number): string; + valueOf(): number; doStuff(): string; } diff --git a/tests/cases/conformance/types/primitives/string/assignFromStringInterface2.ts b/tests/cases/conformance/types/primitives/string/assignFromStringInterface2.ts index 981df14faa3..16308f90251 100644 --- a/tests/cases/conformance/types/primitives/string/assignFromStringInterface2.ts +++ b/tests/cases/conformance/types/primitives/string/assignFromStringInterface2.ts @@ -30,6 +30,7 @@ interface NotString { trim(): string; length: number; substr(from: number, length?: number): string; + valueOf(): string; [index: number]: string; } diff --git a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts index 15764837bc0..c7e9c0fc8e9 100644 --- a/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts +++ b/tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts @@ -60,6 +60,7 @@ class C implements String { trim(): string { return null; } length: number; substr(from: number, length?: number): string { return null; } + valueOf(): string { return null; } [index: number]: string; } diff --git a/tests/cases/fourslash/completionEntryForUnionProperty2.ts b/tests/cases/fourslash/completionEntryForUnionProperty2.ts index b32e6d05345..ccf0b402d08 100644 --- a/tests/cases/fourslash/completionEntryForUnionProperty2.ts +++ b/tests/cases/fourslash/completionEntryForUnionProperty2.ts @@ -16,4 +16,5 @@ goTo.marker(); verify.memberListContains("toString", "(method) toString(): string"); -verify.memberListCount(1); \ No newline at end of file +verify.memberListContains("valueOf", "(method) valueOf(): string | number"); +verify.memberListCount(2); \ No newline at end of file diff --git a/tests/cases/fourslash/completionListEnumMembers.ts b/tests/cases/fourslash/completionListEnumMembers.ts index 938b4aa2f2e..9c24f6228b0 100644 --- a/tests/cases/fourslash/completionListEnumMembers.ts +++ b/tests/cases/fourslash/completionListEnumMembers.ts @@ -21,4 +21,4 @@ verify.memberListCount(0); goTo.marker('enumValueReference'); verify.memberListContains("toString"); verify.memberListContains("toFixed"); -verify.memberListCount(4); +verify.memberListCount(5); diff --git a/tests/cases/fourslash/memberCompletionInForEach1.ts b/tests/cases/fourslash/memberCompletionInForEach1.ts index 82d3b5b2400..2af0393283f 100644 --- a/tests/cases/fourslash/memberCompletionInForEach1.ts +++ b/tests/cases/fourslash/memberCompletionInForEach1.ts @@ -7,11 +7,10 @@ goTo.marker('1'); edit.insert('.'); verify.memberListContains('trim'); -verify.memberListCount(20); +verify.memberListCount(21); edit.insert('});'); // need the following lines to not have parse errors in order for completion list to appear goTo.marker('2'); edit.insert('.'); verify.memberListContains('trim'); -verify.memberListCount(20); - \ No newline at end of file +verify.memberListCount(21); diff --git a/tests/cases/fourslash/server/completions.ts b/tests/cases/fourslash/server/completions.ts index 82d3b5b2400..2af0393283f 100644 --- a/tests/cases/fourslash/server/completions.ts +++ b/tests/cases/fourslash/server/completions.ts @@ -7,11 +7,10 @@ goTo.marker('1'); edit.insert('.'); verify.memberListContains('trim'); -verify.memberListCount(20); +verify.memberListCount(21); edit.insert('});'); // need the following lines to not have parse errors in order for completion list to appear goTo.marker('2'); edit.insert('.'); verify.memberListContains('trim'); -verify.memberListCount(20); - \ No newline at end of file +verify.memberListCount(21); From e60edb3c7ea5651de183667f336151256728c107 Mon Sep 17 00:00:00 2001 From: Dick van den Brink Date: Sun, 8 Mar 2015 19:07:22 +0100 Subject: [PATCH 3/3] Accepted baselines --- .../assignFromNumberInterface2.errors.txt | 5 +++-- .../reference/assignFromNumberInterface2.js | 1 + .../assignFromStringInterface2.errors.txt | 5 +++-- .../reference/assignFromStringInterface2.js | 1 + .../reference/booleanAssignment.errors.txt | 16 ++++++++++------ ...stringLiteralTypeIsSubtypeOfString.errors.txt | 9 +++++---- .../stringLiteralTypeIsSubtypeOfString.js | 2 ++ ...teStringsArrayTypeDefinedInES5Mode.errors.txt | 2 +- ...StringsArrayTypeRedefinedInES6Mode.errors.txt | 2 +- 9 files changed, 27 insertions(+), 16 deletions(-) diff --git a/tests/baselines/reference/assignFromNumberInterface2.errors.txt b/tests/baselines/reference/assignFromNumberInterface2.errors.txt index fa53d8facdf..85639cdeeaf 100644 --- a/tests/baselines/reference/assignFromNumberInterface2.errors.txt +++ b/tests/baselines/reference/assignFromNumberInterface2.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/types/primitives/number/assignFromNumberInterface2.ts(23,1): error TS2322: Type 'Number' is not assignable to type 'number'. -tests/cases/conformance/types/primitives/number/assignFromNumberInterface2.ts(24,1): error TS2322: Type 'NotNumber' is not assignable to type 'number'. +tests/cases/conformance/types/primitives/number/assignFromNumberInterface2.ts(24,1): error TS2322: Type 'Number' is not assignable to type 'number'. +tests/cases/conformance/types/primitives/number/assignFromNumberInterface2.ts(25,1): error TS2322: Type 'NotNumber' is not assignable to type 'number'. ==== tests/cases/conformance/types/primitives/number/assignFromNumberInterface2.ts (2 errors) ==== @@ -12,6 +12,7 @@ tests/cases/conformance/types/primitives/number/assignFromNumberInterface2.ts(24 toFixed(fractionDigits?: number): string; toExponential(fractionDigits?: number): string; toPrecision(precision?: number): string; + valueOf(): number; doStuff(): string; } diff --git a/tests/baselines/reference/assignFromNumberInterface2.js b/tests/baselines/reference/assignFromNumberInterface2.js index 74384d42302..25262bf27f0 100644 --- a/tests/baselines/reference/assignFromNumberInterface2.js +++ b/tests/baselines/reference/assignFromNumberInterface2.js @@ -8,6 +8,7 @@ interface NotNumber { toFixed(fractionDigits?: number): string; toExponential(fractionDigits?: number): string; toPrecision(precision?: number): string; + valueOf(): number; doStuff(): string; } diff --git a/tests/baselines/reference/assignFromStringInterface2.errors.txt b/tests/baselines/reference/assignFromStringInterface2.errors.txt index 2e3e518f75b..4e09eb6eacb 100644 --- a/tests/baselines/reference/assignFromStringInterface2.errors.txt +++ b/tests/baselines/reference/assignFromStringInterface2.errors.txt @@ -1,5 +1,5 @@ -tests/cases/conformance/types/primitives/string/assignFromStringInterface2.ts(46,1): error TS2322: Type 'String' is not assignable to type 'string'. -tests/cases/conformance/types/primitives/string/assignFromStringInterface2.ts(47,1): error TS2322: Type 'NotString' is not assignable to type 'string'. +tests/cases/conformance/types/primitives/string/assignFromStringInterface2.ts(47,1): error TS2322: Type 'String' is not assignable to type 'string'. +tests/cases/conformance/types/primitives/string/assignFromStringInterface2.ts(48,1): error TS2322: Type 'NotString' is not assignable to type 'string'. ==== tests/cases/conformance/types/primitives/string/assignFromStringInterface2.ts (2 errors) ==== @@ -35,6 +35,7 @@ tests/cases/conformance/types/primitives/string/assignFromStringInterface2.ts(47 trim(): string; length: number; substr(from: number, length?: number): string; + valueOf(): string; [index: number]: string; } diff --git a/tests/baselines/reference/assignFromStringInterface2.js b/tests/baselines/reference/assignFromStringInterface2.js index 7e4821ac2a7..5636a4806cc 100644 --- a/tests/baselines/reference/assignFromStringInterface2.js +++ b/tests/baselines/reference/assignFromStringInterface2.js @@ -31,6 +31,7 @@ interface NotString { trim(): string; length: number; substr(from: number, length?: number): string; + valueOf(): string; [index: number]: string; } diff --git a/tests/baselines/reference/booleanAssignment.errors.txt b/tests/baselines/reference/booleanAssignment.errors.txt index 2d6c6b045ea..454bd7ef707 100644 --- a/tests/baselines/reference/booleanAssignment.errors.txt +++ b/tests/baselines/reference/booleanAssignment.errors.txt @@ -1,13 +1,15 @@ tests/cases/compiler/booleanAssignment.ts(2,1): error TS2322: Type 'number' is not assignable to type 'Boolean'. Types of property 'valueOf' are incompatible. - Type '() => Object' is not assignable to type '() => boolean'. - Type 'Object' is not assignable to type 'boolean'. + Type '() => number' is not assignable to type '() => boolean'. + Type 'number' is not assignable to type 'boolean'. tests/cases/compiler/booleanAssignment.ts(3,1): error TS2322: Type 'string' is not assignable to type 'Boolean'. Types of property 'valueOf' are incompatible. - Type '() => Object' is not assignable to type '() => boolean'. + Type '() => string' is not assignable to type '() => boolean'. + Type 'string' is not assignable to type 'boolean'. tests/cases/compiler/booleanAssignment.ts(4,1): error TS2322: Type '{}' is not assignable to type 'Boolean'. Types of property 'valueOf' are incompatible. Type '() => Object' is not assignable to type '() => boolean'. + Type 'Object' is not assignable to type 'boolean'. ==== tests/cases/compiler/booleanAssignment.ts (3 errors) ==== @@ -16,18 +18,20 @@ tests/cases/compiler/booleanAssignment.ts(4,1): error TS2322: Type '{}' is not a ~ !!! error TS2322: Type 'number' is not assignable to type 'Boolean'. !!! error TS2322: Types of property 'valueOf' are incompatible. -!!! error TS2322: Type '() => Object' is not assignable to type '() => boolean'. -!!! error TS2322: Type 'Object' is not assignable to type 'boolean'. +!!! error TS2322: Type '() => number' is not assignable to type '() => boolean'. +!!! error TS2322: Type 'number' is not assignable to type 'boolean'. b = "a"; // Error ~ !!! error TS2322: Type 'string' is not assignable to type 'Boolean'. !!! error TS2322: Types of property 'valueOf' are incompatible. -!!! error TS2322: Type '() => Object' is not assignable to type '() => boolean'. +!!! error TS2322: Type '() => string' is not assignable to type '() => boolean'. +!!! error TS2322: Type 'string' is not assignable to type 'boolean'. b = {}; // Error ~ !!! error TS2322: Type '{}' is not assignable to type 'Boolean'. !!! error TS2322: Types of property 'valueOf' are incompatible. !!! error TS2322: Type '() => Object' is not assignable to type '() => boolean'. +!!! error TS2322: Type 'Object' is not assignable to type 'boolean'. var o = {}; o = b; // OK diff --git a/tests/baselines/reference/stringLiteralTypeIsSubtypeOfString.errors.txt b/tests/baselines/reference/stringLiteralTypeIsSubtypeOfString.errors.txt index b82fa1c93ee..8a916c16b2d 100644 --- a/tests/baselines/reference/stringLiteralTypeIsSubtypeOfString.errors.txt +++ b/tests/baselines/reference/stringLiteralTypeIsSubtypeOfString.errors.txt @@ -3,14 +3,14 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLite tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(30,10): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(34,10): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(38,10): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. -tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(76,10): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. -tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(89,10): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. -tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(93,17): error TS2313: Constraint of a type parameter cannot reference any type parameter from the same type parameter list. +tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(77,10): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. +tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(90,10): error TS2382: Specialized overload signature is not assignable to any non-specialized signature. tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(94,17): error TS2313: Constraint of a type parameter cannot reference any type parameter from the same type parameter list. tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(95,17): error TS2313: Constraint of a type parameter cannot reference any type parameter from the same type parameter list. -tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(97,32): error TS2313: Constraint of a type parameter cannot reference any type parameter from the same type parameter list. +tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(96,17): error TS2313: Constraint of a type parameter cannot reference any type parameter from the same type parameter list. tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(98,32): error TS2313: Constraint of a type parameter cannot reference any type parameter from the same type parameter list. tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(99,32): error TS2313: Constraint of a type parameter cannot reference any type parameter from the same type parameter list. +tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts(100,32): error TS2313: Constraint of a type parameter cannot reference any type parameter from the same type parameter list. ==== tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLiteralTypeIsSubtypeOfString.ts (13 errors) ==== @@ -86,6 +86,7 @@ tests/cases/conformance/types/typeRelationships/subtypesAndSuperTypes/stringLite trim(): string { return null; } length: number; substr(from: number, length?: number): string { return null; } + valueOf(): string { return null; } [index: number]: string; } diff --git a/tests/baselines/reference/stringLiteralTypeIsSubtypeOfString.js b/tests/baselines/reference/stringLiteralTypeIsSubtypeOfString.js index 6260493dea0..01b5dc814a7 100644 --- a/tests/baselines/reference/stringLiteralTypeIsSubtypeOfString.js +++ b/tests/baselines/reference/stringLiteralTypeIsSubtypeOfString.js @@ -61,6 +61,7 @@ class C implements String { trim(): string { return null; } length: number; substr(from: number, length?: number): string { return null; } + valueOf(): string { return null; } [index: number]: string; } @@ -138,6 +139,7 @@ var C = (function () { C.prototype.toLocaleUpperCase = function () { return null; }; C.prototype.trim = function () { return null; }; C.prototype.substr = function (from, length) { return null; }; + C.prototype.valueOf = function () { return null; }; return C; })(); function f10(x) { } diff --git a/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt index 7ac2eff8652..7c796d47398 100644 --- a/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt +++ b/tests/baselines/reference/templateStringsArrayTypeDefinedInES5Mode.errors.txt @@ -1,4 +1,4 @@ -lib.d.ts(515,11): error TS2300: Duplicate identifier 'TemplateStringsArray'. +lib.d.ts(521,11): error TS2300: Duplicate identifier 'TemplateStringsArray'. tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(2,7): error TS2300: Duplicate identifier 'TemplateStringsArray'. tests/cases/compiler/templateStringsArrayTypeDefinedInES5Mode.ts(8,3): error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'. Property 'raw' is missing in type '{ [x: number]: undefined; }'. diff --git a/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.errors.txt b/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.errors.txt index db383b216a5..4b9cb63d9aa 100644 --- a/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.errors.txt +++ b/tests/baselines/reference/templateStringsArrayTypeRedefinedInES6Mode.errors.txt @@ -1,4 +1,4 @@ -lib.d.ts(515,11): error TS2300: Duplicate identifier 'TemplateStringsArray'. +lib.d.ts(521,11): error TS2300: Duplicate identifier 'TemplateStringsArray'. tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts(2,7): error TS2300: Duplicate identifier 'TemplateStringsArray'. tests/cases/compiler/templateStringsArrayTypeRedefinedInES6Mode.ts(8,3): error TS2345: Argument of type '{ [x: number]: undefined; }' is not assignable to parameter of type 'TemplateStringsArray'. Property 'raw' is missing in type '{ [x: number]: undefined; }'.