在Typescript中,当数组包含不同的元素类型时,如何从数组类型获取元素类型?

在Typescript中,当数组包含不同的元素类型时,如何从数组类型获取元素类型?,typescript,Typescript,假设我有一个不同类型的数据数组: const input = ["random", 2, {a: "foo", b: "baz"}]; Typescript可以自动推断和提取类型,例如: type InputTypeArray = typeof input; 这里typescript知道InputTypeArray是(string | number |{a:string,b:string})[] 让我们调用InputType数组元素的类型,即: typeof InputType = stri

假设我有一个不同类型的数据数组:

const input = ["random", 2, {a: "foo", b: "baz"}];
Typescript可以自动推断和提取类型,例如:

type InputTypeArray = typeof input;
这里typescript知道InputTypeArray是(string | number |{a:string,b:string})[]

让我们调用InputType数组元素的类型,即:

typeof InputType = string | number | {a: string, b: string};
我可以从InputTypeArray派生InputType吗? 换句话说,我将如何编写一个接受输入元素之一作为参数的函数

const input = ["random", 2, {a: "foo", b: "baz"}];

const myFunction = (element: InputType) => element;

input.map(myFunction);
我如何在这里写“输入类型”?有没有办法从输入中提取它


我知道我可以通过在map调用中内联myFunction来解决问题,因为typescript将再次推断函数中的正确类型。但是,有没有一种方法可以获取类型neverthless?

您可以通过指向数组成员来提取它,因此在使用以下代码获取数组类型时:

type A = typeof input;
您可以使用此选项获取单个项目的类型:

type B = typeof input[0];

您可以使用此格式获取成员类型:

type InputType=输入类型[编号];

你可以在Steve Holgado的博客文章中阅读更多关于它的信息(以及其他一些很酷的技巧)。

最后它非常简单:)出于某些原因,我期望typeof input[0]会返回字符串,因为这是第一个元素的类型,但显然在类型级别上没有意义。谢谢您也可以对我执行
typeb=typeof input[number]
,这种通用方法似乎比显式使用索引(如另一种解决方案中给出的
input[0]
)更好,因为当数组为空时它不会失败。