Typescript сопоставленные типы - PullRequest
2 голосов
/ 10 июля 2019

Рекомендуется использовать сопоставленные типы поверх явно частичных типов, см. https://www.typescriptlang.org/docs/handbook/advanced-types.html#mapped-types

, т. Е. Вместо

interface PersonPartial {
    name?: string;
    age?: number;
}

мы будем использовать

interface Person {
    name: string;
    age: number;
}
type Partial<T> = {
    [P in keyof T]?: T[P];
}
type PersonPartial = Partial<Person>;

Можно ли отобразить в другом направлении, что-то вроде

type NotPartial<T> = {
    [P in keyof T]!: T[P];
}
type Person = NotPartial<PersonPartial>;

, поскольку у меня есть сгенерированный, который создает частичные интерфейсы, которые нарушают мою проверку типов из-за утки.

1 Ответ

3 голосов
/ 10 июля 2019

Вы можете использовать синтаксис -? для удаления ? из гомоморфного отображенного типа (но продолжайте читать) :

interface Person {
    name?: string;
    age?: number;
}
type Mandatory<T> = {
    [P in keyof T]-?: T[P];
}
type PersonMandatory = Mandatory<Person>;

Пример на детской площадке . Это описано здесь .

Но вам не нужно, потому что в TypeScript он уже есть: Required<T>. Required<T> ...

... удаляет модификаторы ? из всех свойств T, что делает все свойства обязательными.

Итак:

interface Person {
    name?: string;
    age?: number;
}
type RequiredPerson = Required<Person>;

Пример на детской площадке .

...