Generisk objekt typ i typescript


I TypeScript, finns det något sätt att tilldela en variabel en generisk objekttyp. Här är vad jag menar med 'generisk objekttyp'

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

d.v.s. Det ska endast tillåta JavaScript-objekt att tilldelas variabeln och inga andra typer av data (nummer, sträng, boolean)

Svar #1

Självklart:

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

(kod i lekplats)

Svar #2

Typescript 2.1+ har också en användbar typ, Record<K, T>, som du kan använda istället för att göra din egen definition

const myObj: Record<string, any>;

Jag gillar att använda stilen som beskrivs i det bästa svaret när jag kan ge ett meningsfullt namn till key, men om det inte riktigt är lika uppenbart eller nödvändigt är Record ett bra alternativ.

Relaterade artiklar