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

Typescript 类型中所有属性名的数组,typescript,Typescript,我正在使用以下代码 type PersonRow = { name: string; email: string; phone_number: string; age: number; } const personColumnNames: (keyof Omit<PersonRow, 'age'>)[] = [ 'name', 'email', 'phone_number' ]; 编辑: 这是我找到的一种简陋的方法,但这似乎还不够理想 const pe

我正在使用以下代码

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

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

这是我找到的一种简陋的方法,但这似乎还不够理想

const personColumnNames = Object.keys(((): { [key in keyof Omit<PersonRow, 'age'>]: null } => ({
  name: null,
  email: null,
  phone_number: null,
}))())
const personColumnNames=Object.keys((():{[key-in-keyof-Omit]:null}=>({
名称:空,
电子邮件:空,
电话号码:空,
}))())

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

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

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


  • 因此,我不相信有一种方法可以满足您的需要。在不知道您计划如何使用此数组的情况下,很难提出替代方案。

    因此,唯一有效的值是包含三项的数组(
    姓名、电子邮件、电话号码
    )订单重要吗?是的。订单不重要。对你有用吗?如果是的话,我会回答。可能的副本可能的副本
    const personColumnNames = Object.keys(((): { [key in keyof Omit<PersonRow, 'age'>]: null } => ({
      name: null,
      email: null,
      phone_number: null,
    }))())