TypeScript编译器API-提取联合类型元组的类型

问题描述

如果我有一个类型为string[]的数组,并且想从该数组中提取类型,则必须执行以下操作:

const typeArgs = type.typeArguments;
typeArgs[0]; // string

但是如果我有一个类型为[number,string]元组并且想要获得类型为string | number的联合呢?

解决方法

获取元组类型的单个元素类型与获取数组类型的元素类似-使用typeArguments属性:

const [numberType,stringType] = type.typeArguments;

在下面的示例const arr: [string,number] = ['a',1]; arr.map(el => el)中,我需要提取el类型。

如果您有权访问el节点,则可以获取它并询问其类型是(TypeChecker#getTypeAtLocation)。如果您没有访问权限,那么据我所知,不可能使用编译器API创建Type对象。相反,我建议根据typeArguments属性创建您自己的转换表示形式,并在您的代码中使用它。