我的界面是这样的
export interface Details {
Name: [{
First: string;
Last: string;
}];
}
我有一个可观察的配置变量:Configuration: KnockoutObservable<Details> = ko.observable<Details>();
我想在构造函数中给它赋值,如下所示:
config = {
Name: [{
First: "ABC",
Last: "DEF"
},
{
First: "LMN",
Last: "XYZ"
}]
};
this.Configuration(config);
我收到一个错误:
Types of property 'Name' is incompatible and property '0' is missing in type.
Type '{ First:string; Last:string; }[]' is not assignable to
type '[{ First: string; Last:string; }]'
我无法控制接口的更改,因为它正在其他地方使用。
初始化此配置变量的正确方法是什么?
先谢谢你。
4条答案
按热度按时间yrwegjxp1#
我遇到了同样的问题,并通过将界面更改为以下内容来解决:
我知道你可能不想改变界面,但希望这对任何处于这种情况下的人都有帮助。
50pmv0ei2#
这个错误可能是由于错误地输入了一个数组(就像我刚才所做的那样):
原因是方括号表示Typescript中的元组,而不是数组。
The Docs
ztigrdn83#
在此类型定义中:
Name
在编译时不是数组。它是一个只有一个元素的元组。Typescript中的元组允许有额外的元素,但不能有缺失的元素。作为一个1元组,Name
本质上是一个数组,必须 * 至少 * 有一个元素。但是,在此值中:
由于没有显式类型,这里的
Name
属性默认为数组类型。数组可以有任意数量的元素,包括零--它不适合1元组。因此,您会出错。您的错误可以通过给编译器一个提示来修复,提示您的文本实际上是一个元组:
如果你确实需要能够接受一个名字数组,你就必须进行一些转换,可能是这样的:
(You如果你能确定这个元组仅仅是编写类型的人犯的一个错误,你就可以去掉if检查。)
元组引用:https://www.typescriptlang.org/docs/handbook/basic-types.html
a6b3iqyw4#
将接口更新为以下版本应该可以解决此问题: