Что такое правильный тип в TypeScript для обозначения некоторых атрибутов как ? Скажем, у нас есть некий объект, который должен содержать идентификатор поля, но может также иметь много других полей, как он хочет:Установить необходимые атрибуты в TypeScript
interface SomeType {
id: number;
}
let obj: SomeType = { name: "OBJ" }; // GOOD ERROR! We must have `id`
let obj: SomeType = { id: 123 }; // OK
let obj: SomeType = { id: 123, name: "OBJ" }; // BAD ERROR! I just want to add a name
Я знаю, что вы можете сделать дополнительные атрибуты со знаком вопроса, как это :
interface SomeType {
id: number;
name?: string;
engine?: string;
mother?: string;
}
Но я не хочу, чтобы каждый раз изменял этот интерфейс, добавляя и смешивая с ним несвязанные вещи.
Другой вариант, конечно, создать рой интерфейсов каждый проходящими основного, но это звучит как много строк кода:
interface SomeType {
id: number;
}
interface FirstType extends SomeType {
name: string;
}
Сначала я пытался сделать это:
interface SomeType extends any {
id: number;
}
Но TypeScript не может найти имя any
. Может быть, есть что-то подобное с восклицательным знаком?
interface SomeType {
id!: number;
}
UPDATE
Я использую этот тип интерфейса при создании Redux действий, которые должны иметь свойство type
и любое количество других дополнительных атрибутов. Есть действительно много действий, поэтому я не хотел использовать any
как тип.
* «Установить необходимые атрибуты» * - Вы уверены, что * это то, что вы хотите сделать? Это звучит больше для меня, как будто вы хотите определить тип, который имеет некоторые (необходимые) свойства, но допускает любое количество дополнительных не ранее определенных свойств. Пожалуйста, покажите способы использования того, как вы на самом деле хотите использовать этот тип, чтобы мы получили, для чего вы хотите это сделать. – poke