【问题标题】:How to declare an array of type of a variable in Typescript?如何在 Typescript 中声明变量类型的数组?
【发布时间】:2021-07-27 18:25:24
【问题描述】:

假设我有一个变量x,可以是任何类型:

let x: number = 5

我想创建一个数组来存储x 类型的值。在这种情况下,我想要一个number[]

但是,x 可以是任何类型:基元、对象、自定义类型等。

我正在寻找这样的东西:

// Doesn't work
let arr: <x>[] = []

我觉得泛型在某种程度上是这里的答案,但我想不出任何具体的方法来解决这个问题。

有什么办法可以做到吗?

【问题讨论】:

  • let arr: Array&lt;typeof x&gt; = []?

标签: arrays typescript generics


【解决方案1】:

如果x 是类型名称,则只需使用x[]Array&lt;x&gt;Handbook link

如果x变量 名称或类似名称,则使用typeof type operator(typeof x)[]Array&lt;typeof x&gt;

declare let x: number;

let arr1: Array<typeof x>;
//  ^^^−−−−−−−−−−−− this is number[]

let arr2: (typeof x)[];
//  ^^^−−−−−−−−−−−− so is this

Playground Link

请注意,TypeScript typeof 运算符 JavaScript typeof 运算符的值不同。当typeof 作为类型定义的一部分出现时,它是TypeScript typeof 类型运算符;当它与一个值相关时,它是 JavaScript typeof 运算符。

【讨论】:

  • 据我所知,在 JS 中 typeof 不适用于对象。它只是返回"object"。我想要某种 Typescript 结构类型检查。这在 Typescript 中有什么不同吗?
  • @EnderShadow8 TypeScript 中的 typeof 与 JavaScript 中的 typeof 不同。这令人困惑,我认为这是一个设计缺陷,但事实就是如此。 typeof 在 TypeScript 特定代码中使用时(因此,在类型注释中,而不是在运行时代码中)将执行 类型查询 并返回某个变量的类型。但是当以 JS 含义使用时(因此,在运行时代码中),它将返回变量的 JavaScript 类型。现在不必要地混淆了,因为 TS 重新使用了现有运算符的名称,所以它会根据使用的位置做不同的事情。
  • 哦,我明白了。感谢您的答复。我假设 typeof 是一个 JS typeof,而事实上它的不同实际上并没有破坏 JS 的兼容性。
  • @EnderShadow8 - 对,这就是为什么我称它是上面带有链接的类型操作符(不是值操作符)。我应该进一步说明它与 JavaScript typeof 运算符不同。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-08-23
  • 2021-07-20
  • 2016-12-23
  • 1970-01-01
  • 1970-01-01
  • 2022-11-25
  • 2012-09-05
相关资源
最近更新 更多