将数组值提取为 Typescript 类型
基本上,有没有一种方法可以将数组的值提取为字符串类型?这里是伪代码:
class A
{
public keys = ['name', 'age']
}
type ArrayKeys = P in A['keys'] // 'name' or 'age'
如何将 ArrayKeys 缩小为 A['keys'] 的可能值。
答案#1
你需要通过添加 as const 类型断言来向 TypeScript 确保 keys 不会改变(否则,TypeScript 只会认为它是一个字符串数组),请注意,这将使 TypeScript 强制执行这一点。你将无法更改该数组。
之后,这相当简单:
class A
{
public keys = ['name', 'age'] as const
}
type ArrayKeys = A['keys'][number];
在操场上。
[number] 部分是数组值的“访问”。(Array<T>)[number] 永远是 T。
答案#2
我认为你实际上做不到这一点,因为类型当然是静态的编译时特性,而数组是动态的运行时特性。……除非你像宇智波斑展示的那样添加const。
但是你可以使用字符串枚举而不是数组,然后获取它的值来填充数组。
enum ArrayKeys {
name, age
}
class A {
public keys = Object.keys(ArrayKeys).filter(key => isNaN(Number(key)));
}
在操场上。
这也具有提供 ArrayKeys.name 和 ArrayKeys.age 作为枚举值的优势。
