类型中所有属性名称的数组

时间:2019-12-27 19:30:46

标签: typescript

我正在使用以下代码。

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'
];

修改:

这是我发现的一种骇人听闻的方式,但这似乎仍然不理想。

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

1 个答案:

答案 0 :(得分:1)

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

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

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

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