TypeScript 索引到元组中的常量数字不会生成正确的类型

voj3qocg  于 2022-10-29  发布在  TypeScript
关注(0)|答案(7)|浏览(158)

你好,
常量不能正确地访问和转换联合类型值:

const ID = 0;
const NAME = 1;

let data: [number, string] = [0, "bob"];

// This need cast to compile
let id: number = data[ID];
let name: string = data[NAME];

是否有不支持它的原因?
此致!
塞巴斯蒂安

zvms9eto

zvms9eto1#

我们对const枚举(#3411)执行了此操作;我也不明白为什么我们不能

aiazj4mn

aiazj4mn2#

它没有编译,因为你需要一个转换,它不识别ID为0,所以它没有检测到你试图获得联合类型的第一个条目,所以它没有转换它。
需要注意的是,元组的第一个条目是数字,第二个条目是字符串。如果不使用const,data[0]返回数字,data[1]返回字符串。如果使用const,则不起作用。

ckx4rj1h

ckx4rj1h3#

接受PR。
另请参阅相关问题#6804#6805

mm9b1k5b

mm9b1k5b4#

class x{
   public y(){ return "string" }
}
var z= new x;
const y = "y";
var w = z["y"]();
var v = z[y]();
w.length; //Type safe
v.length; //No longer type safe

这一点也要改变吗?

h43kikqp

h43kikqp5#

这一点也要改变吗?
我看不出有何不可。

gstyhher

gstyhher6#

我被它咬了,请尽快修复:
2016年10月24日星期一

const values: [number, string] = [1, 'a'];

const one = values[0]; // number, OK

const index = 0; // index is `0` (not just a number)
const another = values[index]; // expected number, actual: string | number <-- WHY?
tct7dpnv

tct7dpnv7#

@RyanCavanaugh检查TypeScript 3.3.3时,似乎已修复此问题。OP中的idname正确为numberstring,无论是否带有显式类型注解。

相关问题