【问题标题】:Method format within Angular2 model classAngular2模型类中的方法格式
【发布时间】:2016-09-11 20:56:40
【问题描述】:

我有一个基本模型类(不是组件):

export class catModel { 
 constructor(public name: string) { }
 getName: string {
  return this.name.toUpperCase();
 }
}

现在我将尝试在这样的组件中使用此模型:

feline: catModel = {name: 'simba' };

...当我编译时出现以下错误:

类型“{ name: string }”不可分配给类型“catModel”。类型“{名称:字符串}”中缺少属性“getName”

只要从 catModel 中删除 getName 函数就可以正常工作,为什么不让我添加一个方法?

【问题讨论】:

    标签: javascript class angular typescript


    【解决方案1】:

    这是因为 Typescript 使用了structural type system。如TypeScript docs: Type Compatibility中所述

    TypeScript 结构类型系统的基本规则是,如果 y 至少与 x 具有相同的成员,xy 兼容

    “相同成员”表示属性方法。如果您考虑一下这个推理,那是完全有道理的。通过输入CarModel,您向任何使用它的人保证,它的行为类似于CarModel。如果您的对象字面量中没有getName,那么它不能CarModel,因为它不遵守合同。

    阅读上面的第二个链接。这是一个很好的参考文档。


    可能不是您帖子中的主要关注点,但显而易见的解决方案是构造一个 new CarModel('simba') 类的实例。

    【讨论】:

      【解决方案2】:

      这应该可以解决您的问题,

      export class catModel { 
      
        name:string;    //<-----here
      
        constructor(public name: string) { }
      
        getName: string {
          return this.name.toUpperCase();
        }
      
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-03-30
        • 2012-11-01
        • 2015-07-17
        • 1970-01-01
        • 1970-01-01
        • 2016-09-27
        • 2023-03-21
        • 1970-01-01
        相关资源
        最近更新 更多