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

时间:2018-02-09 10:15:47

标签: typescript

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

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

Typescript可以自动推断和提取类型,例如:

type InputTypeArray = typeof input;

这里打字稿知道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);

我如何写" InputType"这里 ?有没有办法从输入中提取它?

我知道我可以通过在map调用中内联myFunction来解决问题,因为typescript将再次推断出函数内部的正确类型。但有没有办法让这种类型变得无可奈何?

2 个答案:

答案 0 :(得分:10)

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

type InputType = typeof input[number];

您可以在 Steve Holgado 的博客文章中阅读更多相关信息(以及其他一些很酷的提示)here

答案 1 :(得分:3)

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

;

您可以使用它来获取单个项目的类型:

val df = spark.read
    .option("header", true)
    .option("delimiter", ";")
    .csv("path to csv file")