如何在 TypeScript 中声明变量具有数组元素的类型?

How to declare that a variable has the type of an array element in TypeScript?

在 TypeScript 中,可以声明,例如,var b 具有与 var s 相同的类型:

var s = "hello";
var b: typeof s;

有没有一种简单的方法可以声明var b与数组中的元素具有相同的类型?这里,var b 应该仍然是一个字符串:

var c = ["hello", "world"];
var b: typeof(c[0]);

一个丑陋的解决方法(即使 c 为空也会运行)是:

var c = ["hello", "world"];
var a = (<T>(x: T[]): T => null)(c);
var b: typeof a;

有没有更好的方法?

Is there a better way?

没有。没有专门的语法。在没有专用语法的情况下,您基本上需要一些接受 T[] 并为您提供 T 的东西。你的内联函数是这种通用用法的一个很好的例子。

在语言规范中找不到任何关于此的内容,对我来说这似乎太琐碎而无法实现;至少在 TypeScript 所处的当前阶段。

但是,shorter/simpler 解决方法可能是:

var a = 0 && c[0];
var b: typeof a;

即使 cnullundefined 也应该工作。
对性能的影响也小得多。