如何将类型别名的所有属性放入数组中?

roh*_*ani 5 typescript typescript-types

给定此类型别名:

export type RequestObject = {
    user_id: number,
    address: string,
    user_type: number,
    points: number,
};
Run Code Online (Sandbox Code Playgroud)

我想要一个包含其所有属性的数组,例如:

['user_id','address','user_type','points']
Run Code Online (Sandbox Code Playgroud)

有什么选择可以得到这个吗?我已经用谷歌搜索过,但我只能使用以下包获取它的界面

https://github.com/kimamula/ts-transformer-keys

vas*_*vas 1

由于类型擦除,你不能轻易做到这一点

Typescript 类型仅在编译时存在。它们不存在于编译后的 javascript 中。因此,您无法使用编译时数据(例如RequestObject类型别名)填充数组(运行时实体),除非您执行一些复杂的操作(例如您找到的库)。

解决方法

  1. 自己编写一些与您找到的库类似的代码。
  2. 找到一个与类型别名一起使用的不同库,例如RequestObject.
  3. 创建一个与您的类型别名等效的接口并将其传递给您找到的库,例如:
import { keys } from 'ts-transformer-keys';

export type RequestObject = {
    user_id: number,
    address: string,
    user_type: number,
    points: number,
}

interface IRequestObject extends RequestObject {}

const keysOfProps = keys<IRequestObject>();

console.log(keysOfProps); // ['user_id', 'address', 'user_type', 'points']
Run Code Online (Sandbox Code Playgroud)