Generisk objekt type i typescript


I TypeScript, finnes det noen måte å tilordne en variabel en generisk objekttype på. Her er hva jeg mener med 'generisk objekttype'

let myVariable: GenericObject = 1 // Should throw an error
                              = 'abc' // Should throw an error
                              = {} // OK
                              = {name: 'qwerty'} //OK

dvs. Det bør bare tillate at JavaScript-objekter tildeles variabelen og ikke andre typer data (nummer, streng, boolean)

Svar #1

Selvfølgelig:

type GenericObject = { [key: string]: any };

let myVariable1: GenericObject = 1; // Type 'number' is not assignable to type '{ [key: string]: any; }'
let myVariable2: GenericObject = 'abc'; // Type 'string' is not assignable to type '{ [key: string]: any; }'
let myVariable3: GenericObject = {} // OK
let myVariable4: GenericObject = {name: 'qwerty'} //OK

(kode i lekeplass)

Svar #2

Typescript 2.1+ har også en nytte-type, Record<K, T>, som du kan bruke i stedet for å lage din egen definisjon

const myObj: Record<string, any>;

Jeg liker å bruke stilen beskrevet i toppsvaret når jeg kan gi et meningsfylt navn til key, men hvis det ikke er så åpenbart eller nødvendig, er Record et flott alternativ.

Relaterte artikler