不可变列表和 Typescript 定义具有类型的对象数组的正确方法
Immutable List and Typescript proper way to define an array of objects with type
这是我从服务器
获得的JSON数据
[
{
"property1": 1,
"property2": "asd",
"property3": 2
},
{
"property1": 1,
"property2": "asd",
"property3": 2
},
{
"property1": 1,
"property2": "asd",
"property3": 2
}
]
我想定义使用此 interface
的不可变列表对象
export interface myObject {
propert1: number,
propert2: string,
propert3: number
}
我尝试过类似的方法但它不起作用:
private myObjectList: Immutable.List<myObject> = Immutable.List([]);
然后使用 angular $http
$http.get('my url to the json').then(function(data){
this.myObjectList = data.data;
});
但是 myObjectList variable
与 json 完全相同,相反我想保留不可变列表对象并以某种方式将数据推送到其中并使用我的特定类型。
换句话说,如果 JSON 对象与 interface
myObject
不完全相同,它应该 return 一个错误
我也试过这个,但后来我收到打字稿错误
$http.get('my url to the json').then(function(data){
this.myObjectList = Immutable.List(data.data);
});
error: Type 'List<{}>' is not assignable to type 'List<Queries>'
您的第一次尝试没有分配不可变列表,而是将确切的数据分配给 myObjectList
。
你的第二次尝试是正确的,你得到的错误是因为编译器无法推断响应类型。
尝试:
$http.get('my url to the json').then(function(data){
this.myObjectList = Immutable.List(data.data as Queries);
});
这是我从服务器
获得的JSON数据[
{
"property1": 1,
"property2": "asd",
"property3": 2
},
{
"property1": 1,
"property2": "asd",
"property3": 2
},
{
"property1": 1,
"property2": "asd",
"property3": 2
}
]
我想定义使用此 interface
export interface myObject {
propert1: number,
propert2: string,
propert3: number
}
我尝试过类似的方法但它不起作用:
private myObjectList: Immutable.List<myObject> = Immutable.List([]);
然后使用 angular $http
$http.get('my url to the json').then(function(data){
this.myObjectList = data.data;
});
但是 myObjectList variable
与 json 完全相同,相反我想保留不可变列表对象并以某种方式将数据推送到其中并使用我的特定类型。
换句话说,如果 JSON 对象与 interface
myObject
不完全相同,它应该 return 一个错误
我也试过这个,但后来我收到打字稿错误
$http.get('my url to the json').then(function(data){
this.myObjectList = Immutable.List(data.data);
});
error: Type 'List<{}>' is not assignable to type 'List<Queries>'
您的第一次尝试没有分配不可变列表,而是将确切的数据分配给 myObjectList
。
你的第二次尝试是正确的,你得到的错误是因为编译器无法推断响应类型。
尝试:
$http.get('my url to the json').then(function(data){
this.myObjectList = Immutable.List(data.data as Queries);
});