未定义的类型Array(Typescript)的属性?
我一直在努力解决一个简单的问题(但它已经让我头疼了)。 我有下面的代码:未定义的类型Array(Typescript)的属性?
interface IFoo{
ReturnFirstBarObject1(): string;
FillBarArray(array: Array<Bar>): void;
}
class Bar {
object1: string;
object2: string;
}
class Foo implements IFoo{
array: Array<Bar>;
constructor(){
this.array = new Array<Bar>();
}
public ReturnFirstBarObject1(): string {
return this.array[0].object1;
}
public FillBarArray(array: Array<Bar>): void {
this.array = array;
}
}
$(document).ready(function(){
var foo = new Foo();
$.get('url/getBars?FooID=1')
.done(function(data: any){
foo.FillBarArray(data);
});
var object1 = foo.ReturnFirstBarObject1();
});
我不知道为什么,但object1回报,我作为“未定义”当我强调“this.array [0]”它返回一个JSON这样
"{'object1' : 'someString', 'object2' : 'someString'}"
我想访问object1,但它返回未定义,我无法对Json执行解决方法,因为typescript将数组对象识别为Bar。
任何人都知道为什么会发生这种情况,我该如何正确访问Bar属性?
这里的结果是一个json字符串,而不是一个json对象。尝试$.getJSON
。
另外@Madhu Ranjan关于jQuery的回调可能返回ReturnFirstBarObject1
的呼叫之后的回答是另一个要考虑的事情,可能会导致此问题。
似乎你想获得的第一个元素,你填补了array
之前,
下面的代码执行你的Ajax调用填充阵列之前,因此你越来越不确定的错误。
var object1 = foo.ReturnFirstBarObject1();
如果移动在代码里AJAX调用它应该工作,
$.get('url/getBars?FooID=1')
.done(function(data: Array<Bar>){
foo.FillBarArray(data);
var object1 = foo.ReturnFirstBarObject1();
});
希望这有助于!
是的,这很可能! – fips
@fips你明白了,我现在真的很愚蠢。我在ajax中返回的是data:any,它将整个json绑定到数组。我会编辑我的问题,然后你回答它,我会给你一个+1。谢谢。 –
@MadhuRanjan感谢您的帮助。我的方法返回一个Json和绑定没有像我想的那样发生。谢谢你们,你们都很棒。 –
'string object1 = ...'是无效的语法。也许你的意思是让let object1:string = ...'?此外,你实例化'Foo',但从不将任何值赋给'array',所以'array [0]'不存在。 – Aaron
不确定你想在这里实现什么,如果你有一个类Bar,并且你想要访问它的属性,你可以直接使用Bar的对象和字符串索引器,比如objOfBar ['object1']或者objOfBar.object1 –
@亚伦抱歉,我已经在编辑它了。这些值由回报提供。真正的问题是返回'undefined'的值 –