From c8091acc5e403b321a476f5aecbdb5281b3a18e2 Mon Sep 17 00:00:00 2001 From: Anders Hejlsberg Date: Mon, 10 Dec 2018 09:14:50 -0800 Subject: [PATCH] Accept new baselines --- .../reference/unknownType1.errors.txt | 31 ++++++++++++- tests/baselines/reference/unknownType1.js | 25 +++++++++++ .../baselines/reference/unknownType1.symbols | 44 +++++++++++++++++++ tests/baselines/reference/unknownType1.types | 39 ++++++++++++++++ 4 files changed, 138 insertions(+), 1 deletion(-) diff --git a/tests/baselines/reference/unknownType1.errors.txt b/tests/baselines/reference/unknownType1.errors.txt index 83849184dce..57fb6114069 100644 --- a/tests/baselines/reference/unknownType1.errors.txt +++ b/tests/baselines/reference/unknownType1.errors.txt @@ -17,13 +17,18 @@ tests/cases/conformance/types/unknown/unknownType1.ts(113,9): error TS2322: Type tests/cases/conformance/types/unknown/unknownType1.ts(114,9): error TS2322: Type 'unknown' is not assignable to type '{} | null | undefined'. Type 'unknown' is not assignable to type '{}'. tests/cases/conformance/types/unknown/unknownType1.ts(120,9): error TS2322: Type 'T' is not assignable to type 'object'. + Type 'unknown' is not assignable to type 'object'. tests/cases/conformance/types/unknown/unknownType1.ts(129,5): error TS2322: Type '123' is not assignable to type '{ [x: string]: unknown; }'. tests/cases/conformance/types/unknown/unknownType1.ts(149,17): error TS2355: A function whose declared type is neither 'void' nor 'any' must return a value. tests/cases/conformance/types/unknown/unknownType1.ts(155,14): error TS2700: Rest types may only be created from object types. tests/cases/conformance/types/unknown/unknownType1.ts(161,5): error TS2564: Property 'a' has no initializer and is not definitely assigned in the constructor. +tests/cases/conformance/types/unknown/unknownType1.ts(170,9): error TS2322: Type 'U' is not assignable to type '{}'. + Type 'unknown' is not assignable to type '{}'. +tests/cases/conformance/types/unknown/unknownType1.ts(180,5): error TS2322: Type 'T' is not assignable to type '{}'. + Type 'unknown' is not assignable to type '{}'. -==== tests/cases/conformance/types/unknown/unknownType1.ts (22 errors) ==== +==== tests/cases/conformance/types/unknown/unknownType1.ts (24 errors) ==== // In an intersection everything absorbs unknown type T00 = unknown & null; // null @@ -181,6 +186,7 @@ tests/cases/conformance/types/unknown/unknownType1.ts(161,5): error TS2564: Prop let y: object = x; // Error ~ !!! error TS2322: Type 'T' is not assignable to type 'object'. +!!! error TS2322: Type 'unknown' is not assignable to type 'object'. } // Anything but primitive assignable to { [x: string]: unknown } @@ -233,4 +239,27 @@ tests/cases/conformance/types/unknown/unknownType1.ts(161,5): error TS2564: Prop b: unknown; c: any; } + + // Type parameter with explicit 'unknown' constraint not assignable to '{}' + + function f30(t: T, u: U) { + let x: {} = t; + let y: {} = u; + ~ +!!! error TS2322: Type 'U' is not assignable to type '{}'. +!!! error TS2322: Type 'unknown' is not assignable to type '{}'. + } + + // Repro from #26796 + + type Test1 = [unknown] extends [{}] ? true : false; // false + type IsDefinitelyDefined = [T] extends [{}] ? true : false; + type Test2 = IsDefinitelyDefined; // false + + function oops(arg: T): {} { + return arg; // Error + ~~~~~~~~~~~ +!!! error TS2322: Type 'T' is not assignable to type '{}'. +!!! error TS2322: Type 'unknown' is not assignable to type '{}'. + } \ No newline at end of file diff --git a/tests/baselines/reference/unknownType1.js b/tests/baselines/reference/unknownType1.js index 81a787b5827..9dd1568861f 100644 --- a/tests/baselines/reference/unknownType1.js +++ b/tests/baselines/reference/unknownType1.js @@ -163,6 +163,23 @@ class C1 { b: unknown; c: any; } + +// Type parameter with explicit 'unknown' constraint not assignable to '{}' + +function f30(t: T, u: U) { + let x: {} = t; + let y: {} = u; +} + +// Repro from #26796 + +type Test1 = [unknown] extends [{}] ? true : false; // false +type IsDefinitelyDefined = [T] extends [{}] ? true : false; +type Test2 = IsDefinitelyDefined; // false + +function oops(arg: T): {} { + return arg; // Error +} //// [unknownType1.js] @@ -276,3 +293,11 @@ var C1 = /** @class */ (function () { } return C1; }()); +// Type parameter with explicit 'unknown' constraint not assignable to '{}' +function f30(t, u) { + var x = t; + var y = u; +} +function oops(arg) { + return arg; // Error +} diff --git a/tests/baselines/reference/unknownType1.symbols b/tests/baselines/reference/unknownType1.symbols index bf4088c6e38..a91664fe029 100644 --- a/tests/baselines/reference/unknownType1.symbols +++ b/tests/baselines/reference/unknownType1.symbols @@ -407,3 +407,47 @@ class C1 { >c : Symbol(C1.c, Decl(unknownType1.ts, 161, 15)) } +// Type parameter with explicit 'unknown' constraint not assignable to '{}' + +function f30(t: T, u: U) { +>f30 : Symbol(f30, Decl(unknownType1.ts, 163, 1)) +>T : Symbol(T, Decl(unknownType1.ts, 167, 13)) +>U : Symbol(U, Decl(unknownType1.ts, 167, 15)) +>t : Symbol(t, Decl(unknownType1.ts, 167, 35)) +>T : Symbol(T, Decl(unknownType1.ts, 167, 13)) +>u : Symbol(u, Decl(unknownType1.ts, 167, 40)) +>U : Symbol(U, Decl(unknownType1.ts, 167, 15)) + + let x: {} = t; +>x : Symbol(x, Decl(unknownType1.ts, 168, 7)) +>t : Symbol(t, Decl(unknownType1.ts, 167, 35)) + + let y: {} = u; +>y : Symbol(y, Decl(unknownType1.ts, 169, 7)) +>u : Symbol(u, Decl(unknownType1.ts, 167, 40)) +} + +// Repro from #26796 + +type Test1 = [unknown] extends [{}] ? true : false; // false +>Test1 : Symbol(Test1, Decl(unknownType1.ts, 170, 1)) + +type IsDefinitelyDefined = [T] extends [{}] ? true : false; +>IsDefinitelyDefined : Symbol(IsDefinitelyDefined, Decl(unknownType1.ts, 174, 51)) +>T : Symbol(T, Decl(unknownType1.ts, 175, 25)) +>T : Symbol(T, Decl(unknownType1.ts, 175, 25)) + +type Test2 = IsDefinitelyDefined; // false +>Test2 : Symbol(Test2, Decl(unknownType1.ts, 175, 78)) +>IsDefinitelyDefined : Symbol(IsDefinitelyDefined, Decl(unknownType1.ts, 174, 51)) + +function oops(arg: T): {} { +>oops : Symbol(oops, Decl(unknownType1.ts, 176, 42)) +>T : Symbol(T, Decl(unknownType1.ts, 178, 14)) +>arg : Symbol(arg, Decl(unknownType1.ts, 178, 33)) +>T : Symbol(T, Decl(unknownType1.ts, 178, 14)) + + return arg; // Error +>arg : Symbol(arg, Decl(unknownType1.ts, 178, 33)) +} + diff --git a/tests/baselines/reference/unknownType1.types b/tests/baselines/reference/unknownType1.types index bf177d4fde8..bd3408a914d 100644 --- a/tests/baselines/reference/unknownType1.types +++ b/tests/baselines/reference/unknownType1.types @@ -453,3 +453,42 @@ class C1 { >c : any } +// Type parameter with explicit 'unknown' constraint not assignable to '{}' + +function f30(t: T, u: U) { +>f30 : (t: T, u: U) => void +>t : T +>u : U + + let x: {} = t; +>x : {} +>t : T + + let y: {} = u; +>y : {} +>u : U +} + +// Repro from #26796 + +type Test1 = [unknown] extends [{}] ? true : false; // false +>Test1 : false +>true : true +>false : false + +type IsDefinitelyDefined = [T] extends [{}] ? true : false; +>IsDefinitelyDefined : IsDefinitelyDefined +>true : true +>false : false + +type Test2 = IsDefinitelyDefined; // false +>Test2 : false + +function oops(arg: T): {} { +>oops : (arg: T) => {} +>arg : T + + return arg; // Error +>arg : T +} +