Общий тип объекта в typescript
В typescript есть ли способ присвоить переменной тип общего типа.
Вот что я подразумеваю под "общим типом объекта"
let myVariable: GenericObject = 1 // Should throw an error
= 'abc' // Should throw an error
= {} // OK
= {name: 'qwerty'} //OK
то есть. Он должен только назначать объекты javascript для переменной и никакого другого типа данных (число, строка, логическое значение)
Ответы
Ответ 1
Уверенная вещь:
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
(код на игровой площадке)
Ответ 2
Начиная с TypeScript 2.2 вы можете использовать
let myVariable: object;
Изменить. Вот пример:
let myVariable: object = { fun: 1 };
Ответ 3
Typescript 2. 1+ также имеет служебный тип, Record<K, T>
, который вы можете использовать вместо того, чтобы создавать собственное определение
const myObj: Record<string, any>;
Мне нравится использовать стиль, описанный в верхнем ответе, когда я могу дать значимое имя key
, но если это не так очевидно или необходимо Record
, это отличный вариант.