Общий тип объекта в 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, это отличный вариант.