0e905be42b
* Switch index signature storage to 'indexInfos: IndexInfo[]' property * Accept new baselines * Remove another usage of IndexKind enum * Update getIndexedAccessType and resolveMappedTypeMembers * Accept new baselines * Update grammar checking for index signatures * Accept new baselines * Consider all index signatures in mapped types and union types * Accept new baselines * Update getIndexType * Accept new baselines * Intersect multiple applicable index signatures * Use getApplicableIndexInfo instead of hardwired string/number handling * Update index signature relationship checking * Report type for which index signature is missing * Report type for which index signature is missing * Accept new baselines * Make 'number' index signatures consistently apply to numeric strings * Accept new baselines * Update fourslash test * Revise index constraint checking * Accept new baselines * Update error messages * Accept new baselines * Update type inference from index signatures * Update isKnownProperty * Update contextual typing based on index signatures * Accept new baselines * Support union types in index signature declarations * Accept new baselines * Check duplicate index signatures / remove redundant template literals from unions with string * Accept new baselines * Include key type in diagnostic / check symbol-named properties * Accept new baselines * Minor fix * Add tests * Accept new baselines * Add optimized findApplicableIndexInfoForName * Accept new baselines * Another place we don't need to obtain literal type for property name * Accept new baselines * Don't create literal types that are going to be discarded * Individual maps for string, number, bigint, and enum literal types * Remove ineffective optimizations * Accept new baselines * Permit intersections as key types in index signatures * Index expression in element access is template literal context * Add tests * Accept new baselines * Symbol index signatures from object literals with computed symbol properties * Accept new baselines * Add more tests * Accept new baselines * Implement Go To Definition for all applicable index signatures * Add fourslash test * Accept new API baselines
122 lines
2.3 KiB
Plaintext
122 lines
2.3 KiB
Plaintext
=== tests/cases/compiler/a.ts ===
|
|
interface BigIntIndex<E> {
|
|
[index: bigint]: E; // should error
|
|
>index : bigint
|
|
}
|
|
|
|
const arr: number[] = [1, 2, 3];
|
|
>arr : number[]
|
|
>[1, 2, 3] : number[]
|
|
>1 : 1
|
|
>2 : 2
|
|
>3 : 3
|
|
|
|
let num: number = arr[1];
|
|
>num : number
|
|
>arr[1] : number
|
|
>arr : number[]
|
|
>1 : 1
|
|
|
|
num = arr["1"];
|
|
>num = arr["1"] : number
|
|
>num : number
|
|
>arr["1"] : number
|
|
>arr : number[]
|
|
>"1" : "1"
|
|
|
|
num = arr[1n]; // should error
|
|
>num = arr[1n] : any
|
|
>num : number
|
|
>arr[1n] : any
|
|
>arr : number[]
|
|
>1n : 1n
|
|
|
|
let key: keyof any; // should be type "string | number | symbol"
|
|
>key : string | number | symbol
|
|
|
|
key = 123;
|
|
>key = 123 : 123
|
|
>key : string | number | symbol
|
|
>123 : 123
|
|
|
|
key = "abc";
|
|
>key = "abc" : "abc"
|
|
>key : string | number | symbol
|
|
>"abc" : "abc"
|
|
|
|
key = Symbol();
|
|
>key = Symbol() : symbol
|
|
>key : string | number | symbol
|
|
>Symbol() : symbol
|
|
>Symbol : SymbolConstructor
|
|
|
|
key = 123n; // should error
|
|
>key = 123n : 123n
|
|
>key : string | number | symbol
|
|
>123n : 123n
|
|
|
|
// Show correct usage of bigint index: explicitly convert to string
|
|
const bigNum: bigint = 0n;
|
|
>bigNum : bigint
|
|
>0n : 0n
|
|
|
|
const typedArray = new Uint8Array(3);
|
|
>typedArray : Uint8Array
|
|
>new Uint8Array(3) : Uint8Array
|
|
>Uint8Array : Uint8ArrayConstructor
|
|
>3 : 3
|
|
|
|
typedArray[bigNum] = 0xAA; // should error
|
|
>typedArray[bigNum] = 0xAA : 170
|
|
>typedArray[bigNum] : any
|
|
>typedArray : Uint8Array
|
|
>bigNum : bigint
|
|
>0xAA : 170
|
|
|
|
typedArray[String(bigNum)] = 0xAA;
|
|
>typedArray[String(bigNum)] = 0xAA : 170
|
|
>typedArray[String(bigNum)] : any
|
|
>typedArray : Uint8Array
|
|
>String(bigNum) : string
|
|
>String : StringConstructor
|
|
>bigNum : bigint
|
|
>0xAA : 170
|
|
|
|
typedArray["1"] = 0xBB;
|
|
>typedArray["1"] = 0xBB : 187
|
|
>typedArray["1"] : number
|
|
>typedArray : Uint8Array
|
|
>"1" : "1"
|
|
>0xBB : 187
|
|
|
|
typedArray[2] = 0xCC;
|
|
>typedArray[2] = 0xCC : 204
|
|
>typedArray[2] : number
|
|
>typedArray : Uint8Array
|
|
>2 : 2
|
|
>0xCC : 204
|
|
|
|
// {1n: 123} is a syntax error; must go in separate file so BigIntIndex error is shown
|
|
=== tests/cases/compiler/b.ts ===
|
|
// BigInt cannot be used as an object literal property
|
|
const a = {1n: 123};
|
|
>a : {}
|
|
>{ : {}
|
|
>1n : 1n
|
|
>123 : 123
|
|
|
|
const b = {[1n]: 456};
|
|
>b : {}
|
|
>{[1n]: 456} : {}
|
|
>[1n] : number
|
|
>1n : 1n
|
|
>456 : 456
|
|
|
|
const c = {[bigNum]: 789};
|
|
>c : {}
|
|
>{[bigNum]: 789} : {}
|
|
>[bigNum] : number
|
|
>bigNum : bigint
|
|
>789 : 789
|
|
|