TypeScript/tests/baselines/reference/numericIndexerConstrainsPropertyDeclarations.types
Anders Hejlsberg a4f9bf0fce
Create type aliases for unresolved type symbols (#45976)
* Create type aliases for unresolved type symbols

* Accept new baselines

* Update fourslash tests

* Unresolved import aliases create tagged unresolved symbols

* Add comments

* Accept new baselines

* Add fourslash tests
2021-09-23 13:21:27 -07:00

232 lines
3.6 KiB
Plaintext

=== tests/cases/conformance/types/objectTypeLiteral/indexSignatures/numericIndexerConstrainsPropertyDeclarations.ts ===
// String indexer types constrain the types of named properties in their containing type
interface MyNumber extends Number {
foo: number;
>foo : number
}
class C {
>C : C
[x: number]: string;
>x : number
constructor() { } // ok
a: string; // ok
>a : string
b: number; // ok
>b : number
c: () => {} // ok
>c : () => {}
"d": string; // ok
>"d" : string
"e": number; // ok
>"e" : number
1.0: string; // ok
>1.0 : string
2.0: number; // error
>2.0 : number
"3.0": string; // ok
>"3.0" : string
"4.0": number; // error
>"4.0" : number
3.0: MyNumber // error
>3.0 : MyNumber
get X() { // ok
>X : string
return '';
>'' : ""
}
set X(v) { } // ok
>X : string
>v : string
foo() {
>foo : () => string
return '';
>'' : ""
}
static sa: number; // ok
>sa : number
static sb: string; // ok
>sb : string
static foo() { } // ok
>foo : () => void
static get X() { // ok
>X : number
return 1;
>1 : 1
}
}
interface I {
[x: number]: string;
>x : number
a: string; // ok
>a : string
b: number; // ok
>b : number
c: () => {} // ok
>c : () => {}
"d": string; // ok
>"d" : string
"e": number; // ok
>"e" : number
1.0: string; // ok
>1.0 : string
2.0: number; // error
>2.0 : number
(): string; // ok
(x): number // ok
>x : any
foo(): string; // ok
>foo : () => string
"3.0": string; // ok
>"3.0" : string
"4.0": number; // error
>"4.0" : number
f: MyNumber; // error
>f : MyNumber
}
var a: {
>a : { (): string; (x: any): number; [x: number]: string; a: string; b: number; c: () => {}; d: string; e: number; 1: string; 2: number; foo(): string; "3.0": string; "4.0": number; f: MyNumber; }
[x: number]: string;
>x : number
a: string; // ok
>a : string
b: number; // ok
>b : number
c: () => {} // ok
>c : () => {}
"d": string; // ok
>"d" : string
"e": number; // ok
>"e" : number
1.0: string; // ok
>1.0 : string
2.0: number; // error
>2.0 : number
(): string; // ok
(x): number // ok
>x : any
foo(): string; // ok
>foo : () => string
"3.0": string; // ok
>"3.0" : string
"4.0": number; // error
>"4.0" : number
f: MyNumber; // error
>f : MyNumber
}
// error
var b: { [x: number]: string; } = {
>b : { [x: number]: string; }
>x : number
>{ a: '', b: 1, c: () => { }, "d": '', "e": 1, 1.0: '', 2.0: 1, "3.0": '', "4.0": 1, f: <Myn>null, get X() { return ''; }, set X(v) { }, foo() { return ''; }} : { a: string; b: number; c: () => void; d: string; e: number; 1: string; 2: number; "3.0": string; "4.0": number; f: Myn; X: string; foo(): string; }
a: '',
>a : string
>'' : ""
b: 1,
>b : number
>1 : 1
c: () => { },
>c : () => void
>() => { } : () => void
"d": '',
>"d" : string
>'' : ""
"e": 1,
>"e" : number
>1 : 1
1.0: '',
>1.0 : string
>'' : ""
2.0: 1,
>2.0 : number
>1 : 1
"3.0": '',
>"3.0" : string
>'' : ""
"4.0": 1,
>"4.0" : number
>1 : 1
f: <Myn>null,
>f : Myn
><Myn>null : Myn
>null : null
get X() {
>X : string
return '';
>'' : ""
},
set X(v) { },
>X : string
>v : string
foo() {
>foo : () => string
return '';
>'' : ""
}
}