【问题标题】:Is it possible to generate strict type from partial type?是否可以从部分类型生成严格类型?
【发布时间】:2017-04-23 12:15:21
【问题描述】:

我们可以从下面的严格类型生成部分类型(来自 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 }

我真正想要的

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

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;

【问题讨论】:

    标签: typescript typescript2.1


    【解决方案1】:

    使用Required 类型。

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

    【讨论】:

      【解决方案2】:

      我找到了方法。

      type Person = { name: string, age?: number };
      type Strict<T> = { [K in (keyof T)]: T[K] };
      type PersonStrict = Strict<Person>;
      

      keyof T 后面的括号是强制性的。

      没有这些括号,age 仍然是可选的。

      【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2011-08-18
      • 2013-02-24
      • 2017-01-06
      • 2020-06-22
      • 1970-01-01
      • 1970-01-01
      • 2011-11-11
      • 2021-10-20
      相关资源
      最近更新 更多