根据变量

时间:2016-06-01 20:16:07

标签: typescript

在TypeScript中,我可以做这样的事情来根据另一个变量隐式输入变量。

var json = {foo: 1};
var someTypedVariable = json; // Assignment gives implicit type

someTypedVariable.bar = 1; // Error
someTypedVariable.foo = 1; // Good

但是有没有办法在不分配的情况下达到相同的效果?我知道我能做到:

var someTypedVariable: {foo:number};

但是如下:

var json = {foo: 1};
var someTypedVariable: json; // Explicitly typing without assignment

有没有办法实现这个目标?

我为什么要这样做? 我有一些我希望键入检查的大型JSON结构。将样本数据放入ts文件很容易,当我将该数据分配给变量时,我会对该变量进行类型检查。我不想维护JSON的类结构 - 我只是希望能够(当JSON结构发生变化时)将新的JSON文件复制/粘贴到我的项目中,并查看我的任何依赖代码是否中断。

1 个答案:

答案 0 :(得分:5)

当然,有办法!由于the related proposal of type queries已经实施:

var json = {foo: 1};
var someTypedVariable : typeof json; // type query, not the string "object"

someTypedVariable.bar = 1; // Error
someTypedVariable.foo = 1; // Good

需要注意的一点是,类型表达式上下文中的typeof运算符是一个类型查询,并不代表与简单表达式中的typeof相同。

您可以在TypeScript playground中尝试。