未定义的类型Array(Typescript)的属性?

未定义的类型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属性?

+0

'string object1 = ...'是无效的语法。也许你的意思是让let object1:string = ...'?此外,你实例化'Foo',但从不将任何值赋给'array',所以'array [0]'不存在。 – Aaron

+0

不确定你想在这里实现什么,如果你有一个类Bar,并且你想要访问它的属性,你可以直接使用Bar的对象和字符串索引器,比如objOfBar ['object1']或者objOfBar.object1 –

+0

@亚伦抱歉,我已经在编辑它了。这些值由回报提供。真正的问题是返回'undefined'的值 –

这里的结果是一个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(); 
}); 

希望这有助于!

+0

是的,这很可能! – fips

+0

@fips你明白了,我现在真的很愚蠢。我在ajax中返回的是data:any,它将整个json绑定到数组。我会编辑我的问题,然后你回答它,我会给你一个+1。谢谢。 –

+0

@MadhuRanjan感谢您的帮助。我的方法返回一个Json和绑定没有像我想的那样发生。谢谢你们,你们都很棒。 –