/
readonlyArraysAndTuples.js
77 lines (69 loc) · 1.99 KB
/
readonlyArraysAndTuples.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
//// [readonlyArraysAndTuples.ts]
type T10 = string[];
type T11 = Array<string>;
type T12 = readonly string[];
type T13 = ReadonlyArray<string>;
type T20 = [number, number];
type T21 = readonly [number, number];
type T30 = readonly string; // Error
type T31<T> = readonly T; // Error
type T32 = readonly readonly string[]; // Error
type T33 = readonly Array<string>; // Error
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;
}
declare var v: readonly[number, number, ...number[]];
v[0] = 1; // Error
v[1] = 1; // Error
v[2] = 1; // Error
delete v[2]; // Error
v[0 + 1] = 1; // Error
v[0 + 2] = 1; // Error
delete v[0 + 1]; // Error
//// [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;
}
v[0] = 1; // Error
v[1] = 1; // Error
v[2] = 1; // Error
delete v[2]; // Error
v[0 + 1] = 1; // Error
v[0 + 2] = 1; // Error
delete v[0 + 1]; // Error
//// [readonlyArraysAndTuples.d.ts]
declare type T10 = string[];
declare type T11 = Array<string>;
declare type T12 = readonly string[];
declare type T13 = ReadonlyArray<string>;
declare type T20 = [number, number];
declare type T21 = readonly [number, number];
declare type T30 = readonly string;
declare type T31<T> = readonly T;
declare type T32 = readonly readonly string[];
declare type T33 = readonly Array<string>;
declare function f1(ma: string[], ra: readonly string[], mt: [string, string], rt: readonly [string, string]): void;
declare var v: readonly [number, number, ...number[]];