映射类型以使所需的所有属性

时间:2018-10-18 22:13:01

标签: typescript

TypeScript类可以具有可选属性和必需属性。

class SomeClass {
  foo?: string;
  bar?: string;
  baz: string = '';
  qux: string = '';
}

Partial<T>映射类型可以使所有属性为可选。

type SomeClassPartial = Partial<SomeClass>;

问题是,我们可以采取相反的方式来制作所需的所有属性吗?

type SomeClassComplete = Complete<SomeClass>;

Partial映射类型将?添加到所有属性,从而使它们均为可选。我正在寻找一种从所有属性中删除?的方法,从而使它们成为必需。

我们尝试使用!运算符,但是它没有这种语义。

type Complete<T> = {
  [P in keyof T]: T[P];
};

1 个答案:

答案 0 :(得分:2)

找到了。 Required<T>部分执行此操作。

定义为inside TypeScript/lib.es5.d.ts here

/**
 * Make all properties in T required
 */
type Required<T> = {
    [P in keyof T]-?: T[P];
};