【发布时间】:2017-02-09 13:13:29
【问题描述】:
我有几种不同的情况,我试图在 typescript 中的数组或对象上定义自制属性,但通常会出现错误:
“对象类型(或数组类型)上不存在属性 x”
例如,我在 Angular 中使用 typescript,并根据 Angular 类型定义文件定义了范围:
scope:ng.IScope
但是当我尝试通过执行以下操作在范围上创建新属性时:
scope.anotherProperty = "string";
我收到上述错误。我知道我可以通过执行以下操作之一来解决它:
scope["anotherProperty"] = "string";
或
(<any>scope).anotherProperty = "string;
另一个例子是当我的 d3 图表中有这样的东西时:
function panZoomNode (node:any) {
for (var i = 0; i < renderedNodes.length; i++) {
if (node.id === renderedNodes[i].id) {
}
}
}
理想情况下,我想将 (node:any) 参数更改为:
(node:Object)
但是当我这样做时,我收到一条错误消息,提示“对象类型上不存在属性 ID”。我知道我可以用上面提到的解决方案来纠正它,但这对我来说似乎有点草率。有没有更好的方法或最好的打字稿方法让它们对数组和对象都正确运行?
谢谢
【问题讨论】:
-
你能从 ng.IScope 继承,在定义中添加另一个属性并使用它吗?后一个问题是由 Object 没有 id 属性引起的。要么将其松散地输入任何类型,要么创建一个类/接口。
-
是的,我应该能够继承它,那么添加定义的最佳方法是什么?那是否允许我做类似“scope.anotherProperty = string”的事情。另外,如果我要添加一个接口,我是否只想设置节点对象可能具有的所有属性,或者如果我只是使用 id,我最好只添加 id?然后在参数定义中调用它。谢谢
-
我在下面添加了一个答案。您可以扩展它,而不是从 ng.IScope 继承。
标签: javascript jquery angularjs d3.js typescript