Typescript:括号表示法属性访问

时间:2016-01-11 17:50:15

标签: typescript

我想要使用括号表示法访问类型化对象:

interface IFoo {
    bar: string[];
}

var obj: IFoo = { bar: ["a", "b"] }
var name = "bar";
obj[name]. // type info lost after dot 

根据我所理解的spec 4.10,这是预期的行为:

A bracket notation property access of the form ObjExpr [ IndexExpr ]  
....  
Otherwise, if IndexExpr is of type Any, the String or Number primitive type, or an enum type, the property access is of type Any.

任何人都可以确认这是否属实,是否有可能绕过这种行为。

修改 我的用例是

中的对象缩小
var props = {long_name: "n"};    
var shortName = props.long_name;

function(minObj) {
    var value = minObj[shortName]
    var newMinObj = {};
    newMinObj[shortName] = value.toUpperCase();
    db.save(newMinObj)
}

1 个答案:

答案 0 :(得分:3)

而不是使用init(dictionary)中的变量,you can write

obj[x]

此处使用变量的唯一原因是从obj["bar"].sort 接口中选择任意属性。你似乎只有一个。如果你的IFoo上有很多字符串数组,你可以使它成为可索引的并写:

IFoo

这将允许你写:

interface IFoo {
    bar: string[];
    bar2: string[];
    [key: string]: string[]; // IFoo is indexable; not a new property
}

但它也允许你写:

var name = "bar";
obj[name].sort;