首页 > 解决方案 > 类型中所有属性名称的数组

问题描述

我正在使用以下代码。

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

解决方案


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

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

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

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


推荐阅读