基本上有一种方法可以将数组值提取为字符串类型吗?这是伪代码:
class A
{
public keys = ['name', 'age']
}
type ArrayKeys = P in A['keys'] // 'name' or 'age'
如何将ArrayKeys缩小为A ['keys']的可能值。
答案 0 :(得分:8)
您将需要通过添加keys
强制转换来确保TypeScript as const
不会改变(否则TypeScript将仅假定它是一个字符串数组),请注意,这将使TypeScript强制执行此操作。您将无法更改阵列。
在那之后,这很简单:
class A
{
public keys = ['name', 'age'] as const
}
type ArrayKeys = A['keys'][number];
[number]
部分是对数组值的“访问”。 (Array<T>)[number]
将始终为T
。
答案 1 :(得分:2)
我不认为您可以做到这一点,因为类型当然是静态编译时功能,而数组是动态运行时功能。 ...除非您添加{{1} }设为Madara Uchiha shows us。
但是您可以使用字符串枚举代替数组,然后获取其值以填充数组。
const
这还具有提供enum ArrayKeys {
name, age
}
class A {
public keys = Object.keys(ArrayKeys).filter(key => isNaN(Number(key)));
}
和ArrayKeys.name
作为枚举值的优点。