提取数组值作为Typescript类型

时间:2019-07-08 15:04:13

标签: typescript

基本上有一种方法可以将数组值提取为字符串类型吗?这是伪代码:

class A
{
    public keys = ['name', 'age']
}

type ArrayKeys = P in A['keys'] // 'name' or 'age'

如何将ArrayKeys缩小为A ['keys']的可能值。

2 个答案:

答案 0 :(得分:8)

您将需要通过添加keys强制转换来确保TypeScript as const不会改变(否则TypeScript将仅假定它是一个字符串数组),请注意,这将使TypeScript强制执行此操作。您将无法更改阵列。

在那之后,这很简单:

class A
{
    public keys = ['name', 'age'] as const
}

type ArrayKeys = A['keys'][number];

On the playground

[number]部分是对数组值的“访问”。 (Array<T>)[number]将始终为T

答案 1 :(得分:2)

我不认为您可以做到这一点,因为类型当然是静态编译时功能,而数组是动态运行时功能。 ...除非您添加{{1} }设为Madara Uchiha shows us

但是您可以使用字符串枚举代替数组,然后获取其值以填充数组。

const

On the playground

这还具有提供enum ArrayKeys { name, age } class A { public keys = Object.keys(ArrayKeys).filter(key => isNaN(Number(key))); } ArrayKeys.name作为枚举值的优点。