我有一个基本的模型类(不是组件):
export class catModel {
constructor(public name: string) { }
getName: string {
return this.name.toUpperCase();
}
}
现在我尝试在这样的组件中使用此模型:
feline: catModel = {name: 'simba' };
...当我编译时,我收到以下错误:
输入' {name:string}'不能分配给类型' catModel'。财产' getName'类型' {name:string}'
中缺少
只要从catModel中删除getName函数就可以正常工作,为什么它不允许我添加方法?
答案 0 :(得分:3)
因为Typescript使用structural type system。如TypeScript docs: Type Compatibility
中所述TypeScript的结构类型系统的基本规则是
x
与y
兼容,如果y
至少与x
具有相同的成员
"同样的成员"表示属性和方法。如果你考虑这个推理,那就很有意义了。通过键入CarModel
的内容,您可以向使用它的任何人保证它的行为类似于CarModel
。如果您的对象文字中没有getName
,那么它就不能<{1}},因为它不会跟随合同。
阅读上面的第二个链接。这是一篇很好的参考文献。
可能不是你帖子中主要关注的内容,但显而易见的解决方案是构建类CarModel
的实例。
答案 1 :(得分:0)
这可以解决您的问题,
export class catModel {
name:string; //<-----here
constructor(public name: string) { }
getName: string {
return this.name.toUpperCase();
}
}