typescript - 是否可以从部分类型生成严格类型?

标签 typescript typescript2.1

我们可以从严格类型生成部分类型,如下所示(来自 TypeScript 2.1):

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

反过来,是否可以从部分类型生成严格类型?

type Strict<T> = { ??? };

type Person = { name: string; age?: number; }
type PersonStrict = Strict<Person>; // === { name: string, age: number }

我真正想要的

我需要以下 2 种类型,但不想写两次。

type Person = { name: string, age?: number, /* and other props */ }
type PersonStrict = { name: string, age: number, /* and other props */ }

我找到了如下所示的详细解决方案,但我想知道是否有更好的方法。

type RequiredProps = { name: string, /* and other required props */ };
type OptionalProps = { age: number, /* and other optional props */ };
type Person = RequiredProps & Partial<OptionalProps>;
type PersonStrict = RequiredProps & OptionalProps;

最佳答案

使用Required类型。

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

关于typescript - 是否可以从部分类型生成严格类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41036336/

相关文章:

angular - 不支持 Typescript 2.1.5 函数调用

javascript - 无法读取未定义 TypeError 的属性 'subscribe'

reactjs - 为什么新的 `Pick<T, K extends keyof T>` 类型允许 React 的 `K` 中的 `setState()` 的子集?

node.js - angular2中的导航错误

为每个 ts 文件生成 TypeScript 2.1 async/await ES5 __awaiter 和 __generator

javascript - 如何在 Typescript 2.1+ 中使用 Bluebird

angular - 如何在 Angular 5 中获取当前路线

typescript - TypeScript中类型注解 `variable: type`和类型断言 `expression as type`的详细区别

TypeScript:如何创建一个类型或接口(interface),它是一个具有 n 个键之一或者是字符串的对象?

angular - 为什么 Angular 不在我的 ControlValueAccessor 实现中调用 registerOnChange?