TYPESCRIPT - Как разрешить больше типов в каждом свойстве объекта TypeScript? - PullRequest
1 голос
/ 27 апреля 2020

У меня есть объект в моем проекте. Вот схема:

IObject : {
  prop1: number;
  prop2: number;
}

Это печатание, которое я хочу для 90% использования. Но несколько случаев требуют, чтобы я также возвращал строку для каждого свойства. Итак, в некоторых случаях мне нужен интерфейс, который возвращает:

object: IObjectWithStrings // Here I want to add string to each property as acceptable type.

// Something like
object: IObjects extends string

Как мне это сделать ?? Я могу создать новый интерфейс только для этого, но я бы предпочел иметь оригинальный интерфейс и расширить его. Спасибо !!

Ответы [ 2 ]

3 голосов
/ 27 апреля 2020

Вы можете сделать это, используя generics . В этом примере вы можете определить базовый тип IObject<T>, где T представляет тип Dynami c, например:

type IObject<T> = {
  prop1: T;
  prop2: T;
}

Чем вы можете использовать напрямую IObject<number> или IObject<number | string>, где number | string означает, что «prop1 может быть одним из обоих» (тип Union), или вы можете просто определить дополнительные типы, используя базовый тип IObject<T>:

type IObjectNumber = IObject<number>;
type IObjectWithString = IObject<number | string>;

const objNum: IObjectNumber = { prop1: 10, prop2: 'abc' } // this will throw error
const objNumStr: IObjectWithString = { prop1: 10, prop2: 'abc' } // this will not throw error
2 голосов
/ 27 апреля 2020

Вы можете просто создать другой тип из того, который у вас есть:

type IObject = {
    prop1: number;
    prop2: number;
}

type IObjectString = {
    [K in keyof IObject]: string 
}

type IObjectStringOrOriginal = {
    [K in keyof IObject]: string | IObject[K]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...