我有几种不同的情况,我试图在typescript中的数组或对象上定义自制属性,但通常会得到错误:
“属性x在类型Object(或类型数组)”
上不存在例如我在Angular中使用typescript并且具有基于Angular类型定义文件的已定义范围:
scope:ng.IScope
但是当我尝试通过执行以下操作在范围上创建新属性时:
scope.anotherProperty = "string";
我收到上面提到的错误。我知道我可以通过执行以下操作之一来解决它:
scope["anotherProperty"] = "string";
OR
(<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”。我知道我可以用上面提到的解决方案纠正它,但这对我来说似乎有点草率。有没有更好的方法或最好的打字方式让这些对阵列和对象正确运行?
由于
答案 0 :(得分:1)
您可以通过在代码中添加以下内容,将额外属性添加到ag('GrossLoss', 'Age', mean, DatasetOne)
界面:
ng.IScope
这将允许您致电
interface ng.IScope {
anotherProperty?:string;
}
如果没有看到代码的其余部分并且知道scope.anotherProperty = "string";
实际代表什么,我只能说为了让编译器满意,您需要在TS代码中包含您引用的成员。如果您正确地执行它,则创建一个包含所有成员的类。如果它派生自现有类或实现现有接口,那么您应该从类定义中的那些继承。
编辑:如果您还没有,您应该查看DefinitelyTyped GitHub repo以获取D3定义。假设node
是D3类型,您可以使用它来解决您的问题并避免编写自己的类。