【问题标题】:Array of all property names in a type类型中所有属性名称的数组
【发布时间】:2019-12-28 04:09:47
【问题描述】:

我正在使用以下代码。

type PersonRow = {
  name: string;
  email: string;
  phone_number: string;
  age: number;
}

const personColumnNames: (keyof Omit<PersonRow, 'age'>)[] = [
  'name',
  'email',
  'phone_number'
];

但是,当我从 personColumnNames 中删除 phone_number 时,我想得到一个错误(以防一列被添加到 PersonRow 类型)。

type PersonRow = {
  name: string;
  email: string;
  phone_number: string;
  age: number;
}

const personColumnNames: (keyof Omit<PersonRow, 'age'>)[] = [
  'name',
  'email'
];

编辑:

这是我发现的一种 hacky 方式,但这似乎仍然不太理想。

const personColumnNames = Object.keys(((): { [key in keyof Omit<PersonRow, 'age'>]: null } => ({
  name: null,
  email: null,
  phone_number: null,
}))())

【问题讨论】:

标签: typescript


【解决方案1】:

要使用 Typescript 键入数组,您有两种选择。

  1. 常见的 SomeType[] 表示“我有一个数组,该数组中的每个项目都是 SomeType。这对你不起作用,因为没有办法输入长度和每个项目不能依赖于任何其他项目。

  2. 一个元组:[TypeA, TypeB, TypeC]。这表示一个固定长度的数组,其中每个索引处的项目类型是已知的。这对您不起作用,因为顺序很重要。我也不相信你可以用动态长度创建这种类型。

所以我不相信有一种方法可以做你想做的事。在不知道您打算如何使用此数组的情况下,很难提出替代方案。

【讨论】:

    猜你喜欢
    • 2014-11-10
    • 1970-01-01
    • 2021-12-04
    • 2019-12-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-12-07
    • 1970-01-01
    相关资源
    最近更新 更多