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.

Relaterade artiklar