javascript - Vad är typen av `typeof x` i typescript?
I TypeScript kan du definiera en klass på följande sätt:
class Sup {
static member: any;
static log() {
console.log('sup');
}
}
Om du gör följande:
let x = Sup;
Varför är typen av x lika med typeof Sup (när jag markerade typen i vscode) och vad betyder typeof Sup? Är detta kopplat till typeof-operatorn?
Dessutom, hur skriver man något som let y=Object.create(Sup)? Skriver man detta som let y: typeof Sup=Object.create(Sup)?
Svar #1
typeof har en annan betydelse i TypeScripts typrum än i vanlig JS. Det är en operator för att få typen av något som finns i värderummet.
let person = { name: 'bob', age: 26 }
type Person = typeof person // Person is { name: string, age: number }
// These are all equivalent
let personRef1: { name: string, age: number } = person
let personRef2: typeof person = person
let personRef3: Person = person
let personRef4 = person
// more examples
let secret = 'helloworld'
type Secret = typeof secret // string
let key = 123
type Key = typeof key // number
let add = (a: number, b: number) => a + b
type Add = typeof add // (a: number, b: number) => number
Så, när du tilldelar SomeClass till en variabel, kommer variabelns typ att vara typeof SomeClass. Den enda anledningen till att det inte förenklas som i exemplen ovan är att det inte finns något sätt att entydigt förenkla typen av en klass; det förblir typeof SomeClass för enkelhetens skull.
Svar #2
I ditt fall betyder let x=Sup; (eller mer exakt, infererade typeof Sup) att variabeln x kan hålla Sup-konstruktionsfunktionen men inte själva instansen:
class Sup { }
let x: typeof Sup;
x = Sup; // ok
x = new Sup(); // invalid.
