diff --git a/tests/baselines/reference/mappedTypesArraysTuples.js b/tests/baselines/reference/mappedTypesArraysTuples.js index 5546f5201df..7bd4b03a6e5 100644 --- a/tests/baselines/reference/mappedTypesArraysTuples.js +++ b/tests/baselines/reference/mappedTypesArraysTuples.js @@ -28,6 +28,14 @@ type B = { b: string }; type T40 = Boxified | [A, B] | string | string[]>; +type ReadWrite = { -readonly [P in keyof T] : T[P] }; + +type T50 = Readonly; +type T51 = Readonly<[number, number]>; +type T52 = Partial>; +type T53 = Readonly>; +type T54 = ReadWrite>; + declare function unboxify(x: Boxified): T; declare let x10: [Box, Box, ...Box[]]; @@ -147,6 +155,14 @@ declare type B = { b: string; }; declare type T40 = Boxified | [A, B] | string | string[]>; +declare type ReadWrite = { + -readonly [P in keyof T]: T[P]; +}; +declare type T50 = Readonly; +declare type T51 = Readonly<[number, number]>; +declare type T52 = Partial>; +declare type T53 = Readonly>; +declare type T54 = ReadWrite>; declare function unboxify(x: Boxified): T; declare let x10: [Box, Box, ...Box[]]; declare let y10: [number, string, ...boolean[]]; diff --git a/tests/baselines/reference/mappedTypesArraysTuples.symbols b/tests/baselines/reference/mappedTypesArraysTuples.symbols index ffc7fe19e3f..48a3979585c 100644 --- a/tests/baselines/reference/mappedTypesArraysTuples.symbols +++ b/tests/baselines/reference/mappedTypesArraysTuples.symbols @@ -108,247 +108,279 @@ type T40 = Boxified | [A, B] | string | string[]>; >A : Symbol(A, Decl(mappedTypesArraysTuples.ts, 22, 39)) >B : Symbol(B, Decl(mappedTypesArraysTuples.ts, 24, 23)) +type ReadWrite = { -readonly [P in keyof T] : T[P] }; +>ReadWrite : Symbol(ReadWrite, Decl(mappedTypesArraysTuples.ts, 27, 77)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 29, 15)) +>P : Symbol(P, Decl(mappedTypesArraysTuples.ts, 29, 33)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 29, 15)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 29, 15)) +>P : Symbol(P, Decl(mappedTypesArraysTuples.ts, 29, 33)) + +type T50 = Readonly; +>T50 : Symbol(T50, Decl(mappedTypesArraysTuples.ts, 29, 56)) +>Readonly : Symbol(Readonly, Decl(lib.es5.d.ts, --, --)) + +type T51 = Readonly<[number, number]>; +>T51 : Symbol(T51, Decl(mappedTypesArraysTuples.ts, 31, 30)) +>Readonly : Symbol(Readonly, Decl(lib.es5.d.ts, --, --)) + +type T52 = Partial>; +>T52 : Symbol(T52, Decl(mappedTypesArraysTuples.ts, 32, 38)) +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) +>Readonly : Symbol(Readonly, Decl(lib.es5.d.ts, --, --)) + +type T53 = Readonly>; +>T53 : Symbol(T53, Decl(mappedTypesArraysTuples.ts, 33, 39)) +>Readonly : Symbol(Readonly, Decl(lib.es5.d.ts, --, --)) +>Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) + +type T54 = ReadWrite>; +>T54 : Symbol(T54, Decl(mappedTypesArraysTuples.ts, 34, 39)) +>ReadWrite : Symbol(ReadWrite, Decl(mappedTypesArraysTuples.ts, 27, 77)) +>Required : Symbol(Required, Decl(lib.es5.d.ts, --, --)) +>T53 : Symbol(T53, Decl(mappedTypesArraysTuples.ts, 33, 39)) + declare function unboxify(x: Boxified): T; ->unboxify : Symbol(unboxify, Decl(mappedTypesArraysTuples.ts, 27, 77)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 29, 26)) ->x : Symbol(x, Decl(mappedTypesArraysTuples.ts, 29, 29)) +>unboxify : Symbol(unboxify, Decl(mappedTypesArraysTuples.ts, 35, 36)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 37, 26)) +>x : Symbol(x, Decl(mappedTypesArraysTuples.ts, 37, 29)) >Boxified : Symbol(Boxified, Decl(mappedTypesArraysTuples.ts, 0, 27)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 29, 26)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 29, 26)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 37, 26)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 37, 26)) declare let x10: [Box, Box, ...Box[]]; ->x10 : Symbol(x10, Decl(mappedTypesArraysTuples.ts, 31, 11)) +>x10 : Symbol(x10, Decl(mappedTypesArraysTuples.ts, 39, 11)) >Box : Symbol(Box, Decl(mappedTypesArraysTuples.ts, 0, 0)) >Box : Symbol(Box, Decl(mappedTypesArraysTuples.ts, 0, 0)) >Box : Symbol(Box, Decl(mappedTypesArraysTuples.ts, 0, 0)) let y10 = unboxify(x10); ->y10 : Symbol(y10, Decl(mappedTypesArraysTuples.ts, 32, 3)) ->unboxify : Symbol(unboxify, Decl(mappedTypesArraysTuples.ts, 27, 77)) ->x10 : Symbol(x10, Decl(mappedTypesArraysTuples.ts, 31, 11)) +>y10 : Symbol(y10, Decl(mappedTypesArraysTuples.ts, 40, 3)) +>unboxify : Symbol(unboxify, Decl(mappedTypesArraysTuples.ts, 35, 36)) +>x10 : Symbol(x10, Decl(mappedTypesArraysTuples.ts, 39, 11)) declare let x11: Box[]; ->x11 : Symbol(x11, Decl(mappedTypesArraysTuples.ts, 34, 11)) +>x11 : Symbol(x11, Decl(mappedTypesArraysTuples.ts, 42, 11)) >Box : Symbol(Box, Decl(mappedTypesArraysTuples.ts, 0, 0)) let y11 = unboxify(x11); ->y11 : Symbol(y11, Decl(mappedTypesArraysTuples.ts, 35, 3)) ->unboxify : Symbol(unboxify, Decl(mappedTypesArraysTuples.ts, 27, 77)) ->x11 : Symbol(x11, Decl(mappedTypesArraysTuples.ts, 34, 11)) +>y11 : Symbol(y11, Decl(mappedTypesArraysTuples.ts, 43, 3)) +>unboxify : Symbol(unboxify, Decl(mappedTypesArraysTuples.ts, 35, 36)) +>x11 : Symbol(x11, Decl(mappedTypesArraysTuples.ts, 42, 11)) declare let x12: { a: Box, b: Box }; ->x12 : Symbol(x12, Decl(mappedTypesArraysTuples.ts, 37, 11)) ->a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 37, 18)) +>x12 : Symbol(x12, Decl(mappedTypesArraysTuples.ts, 45, 11)) +>a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 45, 18)) >Box : Symbol(Box, Decl(mappedTypesArraysTuples.ts, 0, 0)) ->b : Symbol(b, Decl(mappedTypesArraysTuples.ts, 37, 34)) +>b : Symbol(b, Decl(mappedTypesArraysTuples.ts, 45, 34)) >Box : Symbol(Box, Decl(mappedTypesArraysTuples.ts, 0, 0)) let y12 = unboxify(x12); ->y12 : Symbol(y12, Decl(mappedTypesArraysTuples.ts, 38, 3)) ->unboxify : Symbol(unboxify, Decl(mappedTypesArraysTuples.ts, 27, 77)) ->x12 : Symbol(x12, Decl(mappedTypesArraysTuples.ts, 37, 11)) +>y12 : Symbol(y12, Decl(mappedTypesArraysTuples.ts, 46, 3)) +>unboxify : Symbol(unboxify, Decl(mappedTypesArraysTuples.ts, 35, 36)) +>x12 : Symbol(x12, Decl(mappedTypesArraysTuples.ts, 45, 11)) declare function nonpartial(x: Partial): T; ->nonpartial : Symbol(nonpartial, Decl(mappedTypesArraysTuples.ts, 38, 24)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 40, 28)) ->x : Symbol(x, Decl(mappedTypesArraysTuples.ts, 40, 31)) +>nonpartial : Symbol(nonpartial, Decl(mappedTypesArraysTuples.ts, 46, 24)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 48, 28)) +>x : Symbol(x, Decl(mappedTypesArraysTuples.ts, 48, 31)) >Partial : Symbol(Partial, Decl(lib.es5.d.ts, --, --)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 40, 28)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 40, 28)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 48, 28)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 48, 28)) declare let x20: [number | undefined, string?, ...boolean[]]; ->x20 : Symbol(x20, Decl(mappedTypesArraysTuples.ts, 42, 11)) +>x20 : Symbol(x20, Decl(mappedTypesArraysTuples.ts, 50, 11)) let y20 = nonpartial(x20); ->y20 : Symbol(y20, Decl(mappedTypesArraysTuples.ts, 43, 3)) ->nonpartial : Symbol(nonpartial, Decl(mappedTypesArraysTuples.ts, 38, 24)) ->x20 : Symbol(x20, Decl(mappedTypesArraysTuples.ts, 42, 11)) +>y20 : Symbol(y20, Decl(mappedTypesArraysTuples.ts, 51, 3)) +>nonpartial : Symbol(nonpartial, Decl(mappedTypesArraysTuples.ts, 46, 24)) +>x20 : Symbol(x20, Decl(mappedTypesArraysTuples.ts, 50, 11)) declare let x21: (number | undefined)[]; ->x21 : Symbol(x21, Decl(mappedTypesArraysTuples.ts, 45, 11)) +>x21 : Symbol(x21, Decl(mappedTypesArraysTuples.ts, 53, 11)) let y21 = nonpartial(x21); ->y21 : Symbol(y21, Decl(mappedTypesArraysTuples.ts, 46, 3)) ->nonpartial : Symbol(nonpartial, Decl(mappedTypesArraysTuples.ts, 38, 24)) ->x21 : Symbol(x21, Decl(mappedTypesArraysTuples.ts, 45, 11)) +>y21 : Symbol(y21, Decl(mappedTypesArraysTuples.ts, 54, 3)) +>nonpartial : Symbol(nonpartial, Decl(mappedTypesArraysTuples.ts, 46, 24)) +>x21 : Symbol(x21, Decl(mappedTypesArraysTuples.ts, 53, 11)) declare let x22: { a: number | undefined, b?: string[] }; ->x22 : Symbol(x22, Decl(mappedTypesArraysTuples.ts, 48, 11)) ->a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 48, 18)) ->b : Symbol(b, Decl(mappedTypesArraysTuples.ts, 48, 41)) +>x22 : Symbol(x22, Decl(mappedTypesArraysTuples.ts, 56, 11)) +>a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 56, 18)) +>b : Symbol(b, Decl(mappedTypesArraysTuples.ts, 56, 41)) let y22 = nonpartial(x22); ->y22 : Symbol(y22, Decl(mappedTypesArraysTuples.ts, 49, 3)) ->nonpartial : Symbol(nonpartial, Decl(mappedTypesArraysTuples.ts, 38, 24)) ->x22 : Symbol(x22, Decl(mappedTypesArraysTuples.ts, 48, 11)) +>y22 : Symbol(y22, Decl(mappedTypesArraysTuples.ts, 57, 3)) +>nonpartial : Symbol(nonpartial, Decl(mappedTypesArraysTuples.ts, 46, 24)) +>x22 : Symbol(x22, Decl(mappedTypesArraysTuples.ts, 56, 11)) type Awaited = T extends PromiseLike ? U : T; ->Awaited : Symbol(Awaited, Decl(mappedTypesArraysTuples.ts, 49, 26)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 51, 13)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 51, 13)) +>Awaited : Symbol(Awaited, Decl(mappedTypesArraysTuples.ts, 57, 26)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 59, 13)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 59, 13)) >PromiseLike : Symbol(PromiseLike, Decl(lib.es5.d.ts, --, --)) ->U : Symbol(U, Decl(mappedTypesArraysTuples.ts, 51, 45)) ->U : Symbol(U, Decl(mappedTypesArraysTuples.ts, 51, 45)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 51, 13)) +>U : Symbol(U, Decl(mappedTypesArraysTuples.ts, 59, 45)) +>U : Symbol(U, Decl(mappedTypesArraysTuples.ts, 59, 45)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 59, 13)) type Awaitified = { [P in keyof T]: Awaited }; ->Awaitified : Symbol(Awaitified, Decl(mappedTypesArraysTuples.ts, 51, 57)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 52, 16)) ->P : Symbol(P, Decl(mappedTypesArraysTuples.ts, 52, 24)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 52, 16)) ->Awaited : Symbol(Awaited, Decl(mappedTypesArraysTuples.ts, 49, 26)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 52, 16)) ->P : Symbol(P, Decl(mappedTypesArraysTuples.ts, 52, 24)) +>Awaitified : Symbol(Awaitified, Decl(mappedTypesArraysTuples.ts, 59, 57)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 60, 16)) +>P : Symbol(P, Decl(mappedTypesArraysTuples.ts, 60, 24)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 60, 16)) +>Awaited : Symbol(Awaited, Decl(mappedTypesArraysTuples.ts, 57, 26)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 60, 16)) +>P : Symbol(P, Decl(mappedTypesArraysTuples.ts, 60, 24)) declare function all(...values: T): Promise>; ->all : Symbol(all, Decl(mappedTypesArraysTuples.ts, 52, 55)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 54, 21)) ->values : Symbol(values, Decl(mappedTypesArraysTuples.ts, 54, 38)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 54, 21)) +>all : Symbol(all, Decl(mappedTypesArraysTuples.ts, 60, 55)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 62, 21)) +>values : Symbol(values, Decl(mappedTypesArraysTuples.ts, 62, 38)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 62, 21)) >Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --)) ->Awaitified : Symbol(Awaitified, Decl(mappedTypesArraysTuples.ts, 51, 57)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 54, 21)) +>Awaitified : Symbol(Awaitified, Decl(mappedTypesArraysTuples.ts, 59, 57)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 62, 21)) function f1(a: number, b: Promise, c: string[], d: Promise) { ->f1 : Symbol(f1, Decl(mappedTypesArraysTuples.ts, 54, 76)) ->a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 56, 12)) ->b : Symbol(b, Decl(mappedTypesArraysTuples.ts, 56, 22)) +>f1 : Symbol(f1, Decl(mappedTypesArraysTuples.ts, 62, 76)) +>a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 64, 12)) +>b : Symbol(b, Decl(mappedTypesArraysTuples.ts, 64, 22)) >Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --)) ->c : Symbol(c, Decl(mappedTypesArraysTuples.ts, 56, 42)) ->d : Symbol(d, Decl(mappedTypesArraysTuples.ts, 56, 55)) +>c : Symbol(c, Decl(mappedTypesArraysTuples.ts, 64, 42)) +>d : Symbol(d, Decl(mappedTypesArraysTuples.ts, 64, 55)) >Promise : Symbol(Promise, Decl(lib.es5.d.ts, --, --)) let x1 = all(a); ->x1 : Symbol(x1, Decl(mappedTypesArraysTuples.ts, 57, 7)) ->all : Symbol(all, Decl(mappedTypesArraysTuples.ts, 52, 55)) ->a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 56, 12)) +>x1 : Symbol(x1, Decl(mappedTypesArraysTuples.ts, 65, 7)) +>all : Symbol(all, Decl(mappedTypesArraysTuples.ts, 60, 55)) +>a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 64, 12)) let x2 = all(a, b); ->x2 : Symbol(x2, Decl(mappedTypesArraysTuples.ts, 58, 7)) ->all : Symbol(all, Decl(mappedTypesArraysTuples.ts, 52, 55)) ->a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 56, 12)) ->b : Symbol(b, Decl(mappedTypesArraysTuples.ts, 56, 22)) +>x2 : Symbol(x2, Decl(mappedTypesArraysTuples.ts, 66, 7)) +>all : Symbol(all, Decl(mappedTypesArraysTuples.ts, 60, 55)) +>a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 64, 12)) +>b : Symbol(b, Decl(mappedTypesArraysTuples.ts, 64, 22)) let x3 = all(a, b, c); ->x3 : Symbol(x3, Decl(mappedTypesArraysTuples.ts, 59, 7)) ->all : Symbol(all, Decl(mappedTypesArraysTuples.ts, 52, 55)) ->a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 56, 12)) ->b : Symbol(b, Decl(mappedTypesArraysTuples.ts, 56, 22)) ->c : Symbol(c, Decl(mappedTypesArraysTuples.ts, 56, 42)) +>x3 : Symbol(x3, Decl(mappedTypesArraysTuples.ts, 67, 7)) +>all : Symbol(all, Decl(mappedTypesArraysTuples.ts, 60, 55)) +>a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 64, 12)) +>b : Symbol(b, Decl(mappedTypesArraysTuples.ts, 64, 22)) +>c : Symbol(c, Decl(mappedTypesArraysTuples.ts, 64, 42)) let x4 = all(a, b, c, d); ->x4 : Symbol(x4, Decl(mappedTypesArraysTuples.ts, 60, 7)) ->all : Symbol(all, Decl(mappedTypesArraysTuples.ts, 52, 55)) ->a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 56, 12)) ->b : Symbol(b, Decl(mappedTypesArraysTuples.ts, 56, 22)) ->c : Symbol(c, Decl(mappedTypesArraysTuples.ts, 56, 42)) ->d : Symbol(d, Decl(mappedTypesArraysTuples.ts, 56, 55)) +>x4 : Symbol(x4, Decl(mappedTypesArraysTuples.ts, 68, 7)) +>all : Symbol(all, Decl(mappedTypesArraysTuples.ts, 60, 55)) +>a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 64, 12)) +>b : Symbol(b, Decl(mappedTypesArraysTuples.ts, 64, 22)) +>c : Symbol(c, Decl(mappedTypesArraysTuples.ts, 64, 42)) +>d : Symbol(d, Decl(mappedTypesArraysTuples.ts, 64, 55)) } function f2(a: Boxified) { ->f2 : Symbol(f2, Decl(mappedTypesArraysTuples.ts, 61, 1)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 63, 12)) ->a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 63, 29)) +>f2 : Symbol(f2, Decl(mappedTypesArraysTuples.ts, 69, 1)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 71, 12)) +>a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 71, 29)) >Boxified : Symbol(Boxified, Decl(mappedTypesArraysTuples.ts, 0, 27)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 63, 12)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 71, 12)) let x: Box | undefined = a.pop(); ->x : Symbol(x, Decl(mappedTypesArraysTuples.ts, 64, 7)) +>x : Symbol(x, Decl(mappedTypesArraysTuples.ts, 72, 7)) >Box : Symbol(Box, Decl(mappedTypesArraysTuples.ts, 0, 0)) >a.pop : Symbol(Array.pop, Decl(lib.es5.d.ts, --, --)) ->a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 63, 29)) +>a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 71, 29)) >pop : Symbol(Array.pop, Decl(lib.es5.d.ts, --, --)) let y: Box[] = a.concat(a); ->y : Symbol(y, Decl(mappedTypesArraysTuples.ts, 65, 7)) +>y : Symbol(y, Decl(mappedTypesArraysTuples.ts, 73, 7)) >Box : Symbol(Box, Decl(mappedTypesArraysTuples.ts, 0, 0)) >a.concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) ->a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 63, 29)) +>a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 71, 29)) >concat : Symbol(Array.concat, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) ->a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 63, 29)) +>a : Symbol(a, Decl(mappedTypesArraysTuples.ts, 71, 29)) } // Repro from #26163 type ElementType = T extends Array ? U : never; ->ElementType : Symbol(ElementType, Decl(mappedTypesArraysTuples.ts, 66, 1)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 70, 17)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 70, 17)) +>ElementType : Symbol(ElementType, Decl(mappedTypesArraysTuples.ts, 74, 1)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 78, 17)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 78, 17)) >Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) ->U : Symbol(U, Decl(mappedTypesArraysTuples.ts, 70, 43)) ->U : Symbol(U, Decl(mappedTypesArraysTuples.ts, 70, 43)) +>U : Symbol(U, Decl(mappedTypesArraysTuples.ts, 78, 43)) +>U : Symbol(U, Decl(mappedTypesArraysTuples.ts, 78, 43)) type Mapped = { [K in keyof T]: T[K] }; ->Mapped : Symbol(Mapped, Decl(mappedTypesArraysTuples.ts, 70, 59)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 71, 12)) ->K : Symbol(K, Decl(mappedTypesArraysTuples.ts, 71, 20)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 71, 12)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 71, 12)) ->K : Symbol(K, Decl(mappedTypesArraysTuples.ts, 71, 20)) +>Mapped : Symbol(Mapped, Decl(mappedTypesArraysTuples.ts, 78, 59)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 79, 12)) +>K : Symbol(K, Decl(mappedTypesArraysTuples.ts, 79, 20)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 79, 12)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 79, 12)) +>K : Symbol(K, Decl(mappedTypesArraysTuples.ts, 79, 20)) type F = ElementType>; ->F : Symbol(F, Decl(mappedTypesArraysTuples.ts, 71, 42)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 73, 7)) ->ElementType : Symbol(ElementType, Decl(mappedTypesArraysTuples.ts, 66, 1)) ->Mapped : Symbol(Mapped, Decl(mappedTypesArraysTuples.ts, 70, 59)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 73, 7)) +>F : Symbol(F, Decl(mappedTypesArraysTuples.ts, 79, 42)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 81, 7)) +>ElementType : Symbol(ElementType, Decl(mappedTypesArraysTuples.ts, 74, 1)) +>Mapped : Symbol(Mapped, Decl(mappedTypesArraysTuples.ts, 78, 59)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 81, 7)) type R1 = F<[string, number, boolean]>; // string | number | boolean ->R1 : Symbol(R1, Decl(mappedTypesArraysTuples.ts, 73, 35)) ->F : Symbol(F, Decl(mappedTypesArraysTuples.ts, 71, 42)) +>R1 : Symbol(R1, Decl(mappedTypesArraysTuples.ts, 81, 35)) +>F : Symbol(F, Decl(mappedTypesArraysTuples.ts, 79, 42)) type R2 = ElementType>; // string | number | boolean ->R2 : Symbol(R2, Decl(mappedTypesArraysTuples.ts, 74, 39)) ->ElementType : Symbol(ElementType, Decl(mappedTypesArraysTuples.ts, 66, 1)) ->Mapped : Symbol(Mapped, Decl(mappedTypesArraysTuples.ts, 70, 59)) +>R2 : Symbol(R2, Decl(mappedTypesArraysTuples.ts, 82, 39)) +>ElementType : Symbol(ElementType, Decl(mappedTypesArraysTuples.ts, 74, 1)) +>Mapped : Symbol(Mapped, Decl(mappedTypesArraysTuples.ts, 78, 59)) // Repro from #26163 declare function acceptArray(arr: any[]): void; ->acceptArray : Symbol(acceptArray, Decl(mappedTypesArraysTuples.ts, 75, 57)) ->arr : Symbol(arr, Decl(mappedTypesArraysTuples.ts, 79, 29)) +>acceptArray : Symbol(acceptArray, Decl(mappedTypesArraysTuples.ts, 83, 57)) +>arr : Symbol(arr, Decl(mappedTypesArraysTuples.ts, 87, 29)) declare function mapArray(arr: T): Mapped; ->mapArray : Symbol(mapArray, Decl(mappedTypesArraysTuples.ts, 79, 47)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 80, 26)) ->arr : Symbol(arr, Decl(mappedTypesArraysTuples.ts, 80, 43)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 80, 26)) ->Mapped : Symbol(Mapped, Decl(mappedTypesArraysTuples.ts, 70, 59)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 80, 26)) +>mapArray : Symbol(mapArray, Decl(mappedTypesArraysTuples.ts, 87, 47)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 88, 26)) +>arr : Symbol(arr, Decl(mappedTypesArraysTuples.ts, 88, 43)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 88, 26)) +>Mapped : Symbol(Mapped, Decl(mappedTypesArraysTuples.ts, 78, 59)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 88, 26)) function acceptMappedArray(arr: T) { ->acceptMappedArray : Symbol(acceptMappedArray, Decl(mappedTypesArraysTuples.ts, 80, 62)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 81, 27)) ->arr : Symbol(arr, Decl(mappedTypesArraysTuples.ts, 81, 44)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 81, 27)) +>acceptMappedArray : Symbol(acceptMappedArray, Decl(mappedTypesArraysTuples.ts, 88, 62)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 89, 27)) +>arr : Symbol(arr, Decl(mappedTypesArraysTuples.ts, 89, 44)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 89, 27)) acceptArray(mapArray(arr)); ->acceptArray : Symbol(acceptArray, Decl(mappedTypesArraysTuples.ts, 75, 57)) ->mapArray : Symbol(mapArray, Decl(mappedTypesArraysTuples.ts, 79, 47)) ->arr : Symbol(arr, Decl(mappedTypesArraysTuples.ts, 81, 44)) +>acceptArray : Symbol(acceptArray, Decl(mappedTypesArraysTuples.ts, 83, 57)) +>mapArray : Symbol(mapArray, Decl(mappedTypesArraysTuples.ts, 87, 47)) +>arr : Symbol(arr, Decl(mappedTypesArraysTuples.ts, 89, 44)) } // Repro from #26163 type Unconstrained = ElementType>; ->Unconstrained : Symbol(Unconstrained, Decl(mappedTypesArraysTuples.ts, 83, 1)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 87, 19)) ->ElementType : Symbol(ElementType, Decl(mappedTypesArraysTuples.ts, 66, 1)) ->Mapped : Symbol(Mapped, Decl(mappedTypesArraysTuples.ts, 70, 59)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 87, 19)) +>Unconstrained : Symbol(Unconstrained, Decl(mappedTypesArraysTuples.ts, 91, 1)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 95, 19)) +>ElementType : Symbol(ElementType, Decl(mappedTypesArraysTuples.ts, 74, 1)) +>Mapped : Symbol(Mapped, Decl(mappedTypesArraysTuples.ts, 78, 59)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 95, 19)) type T1 = Unconstrained<[string, number, boolean]>; // string | number | boolean ->T1 : Symbol(T1, Decl(mappedTypesArraysTuples.ts, 87, 47)) ->Unconstrained : Symbol(Unconstrained, Decl(mappedTypesArraysTuples.ts, 83, 1)) +>T1 : Symbol(T1, Decl(mappedTypesArraysTuples.ts, 95, 47)) +>Unconstrained : Symbol(Unconstrained, Decl(mappedTypesArraysTuples.ts, 91, 1)) type Constrained = ElementType>; ->Constrained : Symbol(Constrained, Decl(mappedTypesArraysTuples.ts, 88, 51)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 90, 17)) ->ElementType : Symbol(ElementType, Decl(mappedTypesArraysTuples.ts, 66, 1)) ->Mapped : Symbol(Mapped, Decl(mappedTypesArraysTuples.ts, 70, 59)) ->T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 90, 17)) +>Constrained : Symbol(Constrained, Decl(mappedTypesArraysTuples.ts, 96, 51)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 98, 17)) +>ElementType : Symbol(ElementType, Decl(mappedTypesArraysTuples.ts, 74, 1)) +>Mapped : Symbol(Mapped, Decl(mappedTypesArraysTuples.ts, 78, 59)) +>T : Symbol(T, Decl(mappedTypesArraysTuples.ts, 98, 17)) type T2 = Constrained<[string, number, boolean]>; // string | number | boolean ->T2 : Symbol(T2, Decl(mappedTypesArraysTuples.ts, 90, 59)) ->Constrained : Symbol(Constrained, Decl(mappedTypesArraysTuples.ts, 88, 51)) +>T2 : Symbol(T2, Decl(mappedTypesArraysTuples.ts, 98, 59)) +>Constrained : Symbol(Constrained, Decl(mappedTypesArraysTuples.ts, 96, 51)) diff --git a/tests/baselines/reference/mappedTypesArraysTuples.types b/tests/baselines/reference/mappedTypesArraysTuples.types index 98a79e8b600..6b43cd510fb 100644 --- a/tests/baselines/reference/mappedTypesArraysTuples.types +++ b/tests/baselines/reference/mappedTypesArraysTuples.types @@ -68,6 +68,24 @@ type B = { b: string }; type T40 = Boxified | [A, B] | string | string[]>; >T40 : string | Box[] | Boxified | Box[] | readonly Box[] | [Box, Box] +type ReadWrite = { -readonly [P in keyof T] : T[P] }; +>ReadWrite : ReadWrite + +type T50 = Readonly; +>T50 : readonly string[] + +type T51 = Readonly<[number, number]>; +>T51 : readonly [number, number] + +type T52 = Partial>; +>T52 : readonly (string | undefined)[] + +type T53 = Readonly>; +>T53 : readonly (string | undefined)[] + +type T54 = ReadWrite>; +>T54 : string[] + declare function unboxify(x: Boxified): T; >unboxify : (x: Boxified) => T >x : Boxified diff --git a/tests/baselines/reference/readonlyArraysAndTuples.errors.txt b/tests/baselines/reference/readonlyArraysAndTuples.errors.txt new file mode 100644 index 00000000000..dd973def9a2 --- /dev/null +++ b/tests/baselines/reference/readonlyArraysAndTuples.errors.txt @@ -0,0 +1,47 @@ +tests/cases/conformance/types/tuple/readonlyArraysAndTuples.ts(10,5): error TS2740: Type 'readonly string[]' is missing the following properties from type 'string[]': pop, push, reverse, shift, and 3 more. +tests/cases/conformance/types/tuple/readonlyArraysAndTuples.ts(12,5): error TS2740: Type 'readonly [string, string]' is missing the following properties from type 'string[]': pop, push, reverse, shift, and 3 more. +tests/cases/conformance/types/tuple/readonlyArraysAndTuples.ts(16,5): error TS2739: Type 'string[]' is missing the following properties from type '[string, string]': 0, 1 +tests/cases/conformance/types/tuple/readonlyArraysAndTuples.ts(17,5): error TS2740: Type 'readonly string[]' is missing the following properties from type '[string, string]': 0, 1, pop, push, and 5 more. +tests/cases/conformance/types/tuple/readonlyArraysAndTuples.ts(18,5): error TS2740: Type 'readonly [string, string]' is missing the following properties from type '[string, string]': pop, push, reverse, shift, and 3 more. +tests/cases/conformance/types/tuple/readonlyArraysAndTuples.ts(19,5): error TS2739: Type 'string[]' is missing the following properties from type 'readonly [string, string]': 0, 1 +tests/cases/conformance/types/tuple/readonlyArraysAndTuples.ts(20,5): error TS2739: Type 'readonly string[]' is missing the following properties from type 'readonly [string, string]': 0, 1 + + +==== tests/cases/conformance/types/tuple/readonlyArraysAndTuples.ts (7 errors) ==== + type T10 = string[]; + type T11 = Array; + type T12 = readonly string[]; + type T13 = ReadonlyArray; + + type T20 = [number, number]; + type T21 = readonly [number, number]; + + function f1(ma: string[], ra: readonly string[], mt: [string, string], rt: readonly [string, string]) { + ma = ra; // Error + ~~ +!!! error TS2740: Type 'readonly string[]' is missing the following properties from type 'string[]': pop, push, reverse, shift, and 3 more. + ma = mt; + ma = rt; // Error + ~~ +!!! error TS2740: Type 'readonly [string, string]' is missing the following properties from type 'string[]': pop, push, reverse, shift, and 3 more. + ra = ma; + ra = mt; + ra = rt; + mt = ma; // Error + ~~ +!!! error TS2739: Type 'string[]' is missing the following properties from type '[string, string]': 0, 1 + mt = ra; // Error + ~~ +!!! error TS2740: Type 'readonly string[]' is missing the following properties from type '[string, string]': 0, 1, pop, push, and 5 more. + mt = rt; // Error + ~~ +!!! error TS2740: Type 'readonly [string, string]' is missing the following properties from type '[string, string]': pop, push, reverse, shift, and 3 more. + rt = ma; // Error + ~~ +!!! error TS2739: Type 'string[]' is missing the following properties from type 'readonly [string, string]': 0, 1 + rt = ra; // Error + ~~ +!!! error TS2739: Type 'readonly string[]' is missing the following properties from type 'readonly [string, string]': 0, 1 + rt = mt; + } + \ No newline at end of file diff --git a/tests/baselines/reference/readonlyArraysAndTuples.js b/tests/baselines/reference/readonlyArraysAndTuples.js new file mode 100644 index 00000000000..769ff504251 --- /dev/null +++ b/tests/baselines/reference/readonlyArraysAndTuples.js @@ -0,0 +1,41 @@ +//// [readonlyArraysAndTuples.ts] +type T10 = string[]; +type T11 = Array; +type T12 = readonly string[]; +type T13 = ReadonlyArray; + +type T20 = [number, number]; +type T21 = readonly [number, number]; + +function f1(ma: string[], ra: readonly string[], mt: [string, string], rt: readonly [string, string]) { + ma = ra; // Error + ma = mt; + ma = rt; // Error + ra = ma; + ra = mt; + ra = rt; + mt = ma; // Error + mt = ra; // Error + mt = rt; // Error + rt = ma; // Error + rt = ra; // Error + rt = mt; +} + + +//// [readonlyArraysAndTuples.js] +"use strict"; +function f1(ma, ra, mt, rt) { + ma = ra; // Error + ma = mt; + ma = rt; // Error + ra = ma; + ra = mt; + ra = rt; + mt = ma; // Error + mt = ra; // Error + mt = rt; // Error + rt = ma; // Error + rt = ra; // Error + rt = mt; +} diff --git a/tests/baselines/reference/readonlyArraysAndTuples.symbols b/tests/baselines/reference/readonlyArraysAndTuples.symbols new file mode 100644 index 00000000000..1d6c7dd1dfa --- /dev/null +++ b/tests/baselines/reference/readonlyArraysAndTuples.symbols @@ -0,0 +1,77 @@ +=== tests/cases/conformance/types/tuple/readonlyArraysAndTuples.ts === +type T10 = string[]; +>T10 : Symbol(T10, Decl(readonlyArraysAndTuples.ts, 0, 0)) + +type T11 = Array; +>T11 : Symbol(T11, Decl(readonlyArraysAndTuples.ts, 0, 20)) +>Array : Symbol(Array, Decl(lib.es5.d.ts, --, --), Decl(lib.es5.d.ts, --, --)) + +type T12 = readonly string[]; +>T12 : Symbol(T12, Decl(readonlyArraysAndTuples.ts, 1, 25)) + +type T13 = ReadonlyArray; +>T13 : Symbol(T13, Decl(readonlyArraysAndTuples.ts, 2, 29)) +>ReadonlyArray : Symbol(ReadonlyArray, Decl(lib.es5.d.ts, --, --)) + +type T20 = [number, number]; +>T20 : Symbol(T20, Decl(readonlyArraysAndTuples.ts, 3, 33)) + +type T21 = readonly [number, number]; +>T21 : Symbol(T21, Decl(readonlyArraysAndTuples.ts, 5, 28)) + +function f1(ma: string[], ra: readonly string[], mt: [string, string], rt: readonly [string, string]) { +>f1 : Symbol(f1, Decl(readonlyArraysAndTuples.ts, 6, 37)) +>ma : Symbol(ma, Decl(readonlyArraysAndTuples.ts, 8, 12)) +>ra : Symbol(ra, Decl(readonlyArraysAndTuples.ts, 8, 25)) +>mt : Symbol(mt, Decl(readonlyArraysAndTuples.ts, 8, 48)) +>rt : Symbol(rt, Decl(readonlyArraysAndTuples.ts, 8, 70)) + + ma = ra; // Error +>ma : Symbol(ma, Decl(readonlyArraysAndTuples.ts, 8, 12)) +>ra : Symbol(ra, Decl(readonlyArraysAndTuples.ts, 8, 25)) + + ma = mt; +>ma : Symbol(ma, Decl(readonlyArraysAndTuples.ts, 8, 12)) +>mt : Symbol(mt, Decl(readonlyArraysAndTuples.ts, 8, 48)) + + ma = rt; // Error +>ma : Symbol(ma, Decl(readonlyArraysAndTuples.ts, 8, 12)) +>rt : Symbol(rt, Decl(readonlyArraysAndTuples.ts, 8, 70)) + + ra = ma; +>ra : Symbol(ra, Decl(readonlyArraysAndTuples.ts, 8, 25)) +>ma : Symbol(ma, Decl(readonlyArraysAndTuples.ts, 8, 12)) + + ra = mt; +>ra : Symbol(ra, Decl(readonlyArraysAndTuples.ts, 8, 25)) +>mt : Symbol(mt, Decl(readonlyArraysAndTuples.ts, 8, 48)) + + ra = rt; +>ra : Symbol(ra, Decl(readonlyArraysAndTuples.ts, 8, 25)) +>rt : Symbol(rt, Decl(readonlyArraysAndTuples.ts, 8, 70)) + + mt = ma; // Error +>mt : Symbol(mt, Decl(readonlyArraysAndTuples.ts, 8, 48)) +>ma : Symbol(ma, Decl(readonlyArraysAndTuples.ts, 8, 12)) + + mt = ra; // Error +>mt : Symbol(mt, Decl(readonlyArraysAndTuples.ts, 8, 48)) +>ra : Symbol(ra, Decl(readonlyArraysAndTuples.ts, 8, 25)) + + mt = rt; // Error +>mt : Symbol(mt, Decl(readonlyArraysAndTuples.ts, 8, 48)) +>rt : Symbol(rt, Decl(readonlyArraysAndTuples.ts, 8, 70)) + + rt = ma; // Error +>rt : Symbol(rt, Decl(readonlyArraysAndTuples.ts, 8, 70)) +>ma : Symbol(ma, Decl(readonlyArraysAndTuples.ts, 8, 12)) + + rt = ra; // Error +>rt : Symbol(rt, Decl(readonlyArraysAndTuples.ts, 8, 70)) +>ra : Symbol(ra, Decl(readonlyArraysAndTuples.ts, 8, 25)) + + rt = mt; +>rt : Symbol(rt, Decl(readonlyArraysAndTuples.ts, 8, 70)) +>mt : Symbol(mt, Decl(readonlyArraysAndTuples.ts, 8, 48)) +} + diff --git a/tests/baselines/reference/readonlyArraysAndTuples.types b/tests/baselines/reference/readonlyArraysAndTuples.types new file mode 100644 index 00000000000..a7917f5da2b --- /dev/null +++ b/tests/baselines/reference/readonlyArraysAndTuples.types @@ -0,0 +1,87 @@ +=== tests/cases/conformance/types/tuple/readonlyArraysAndTuples.ts === +type T10 = string[]; +>T10 : string[] + +type T11 = Array; +>T11 : string[] + +type T12 = readonly string[]; +>T12 : readonly string[] + +type T13 = ReadonlyArray; +>T13 : readonly string[] + +type T20 = [number, number]; +>T20 : [number, number] + +type T21 = readonly [number, number]; +>T21 : readonly [number, number] + +function f1(ma: string[], ra: readonly string[], mt: [string, string], rt: readonly [string, string]) { +>f1 : (ma: string[], ra: readonly string[], mt: [string, string], rt: readonly [string, string]) => void +>ma : string[] +>ra : readonly string[] +>mt : [string, string] +>rt : readonly [string, string] + + ma = ra; // Error +>ma = ra : readonly string[] +>ma : string[] +>ra : readonly string[] + + ma = mt; +>ma = mt : [string, string] +>ma : string[] +>mt : [string, string] + + ma = rt; // Error +>ma = rt : readonly [string, string] +>ma : string[] +>rt : readonly [string, string] + + ra = ma; +>ra = ma : string[] +>ra : readonly string[] +>ma : string[] + + ra = mt; +>ra = mt : [string, string] +>ra : readonly string[] +>mt : [string, string] + + ra = rt; +>ra = rt : readonly [string, string] +>ra : readonly string[] +>rt : readonly [string, string] + + mt = ma; // Error +>mt = ma : string[] +>mt : [string, string] +>ma : string[] + + mt = ra; // Error +>mt = ra : readonly string[] +>mt : [string, string] +>ra : readonly string[] + + mt = rt; // Error +>mt = rt : readonly [string, string] +>mt : [string, string] +>rt : readonly [string, string] + + rt = ma; // Error +>rt = ma : string[] +>rt : readonly [string, string] +>ma : string[] + + rt = ra; // Error +>rt = ra : readonly string[] +>rt : readonly [string, string] +>ra : readonly string[] + + rt = mt; +>rt = mt : [string, string] +>rt : readonly [string, string] +>mt : [string, string] +} +