【问题标题】:Typescript inherited classes as function parametersTypescript 继承类作为函数参数
【发布时间】:2017-08-24 13:12:50
【问题描述】:

我在这里有一个打字稿问题。

我有很多模型类,都继承自 BaseModel

class BaseModel {
    public isChecked: boolean;
}

class Animal extends BaseModel {
    public id: number;
}

class Car extends BaseModel {
    public hasHotWheels: boolean;
}

现在我需要编写一个函数,该函数接受从 BaseModel 继承的类的参数。我可以明确列出所有类,但我有 50 多个模型继承自 BaseModel 类,所以我的问题是,我能否以某种方式声明我希望函数参数像这样从所述类继承

function foo( _input: inherits from BaseModel ) {} 

【问题讨论】:

    标签: angular typescript


    【解决方案1】:

    泛型可以提供帮助:

    function foo<TModel extends BaseModel>( _input: TModel ) {}
    

    在描述泛型时可以使用许多类关键字,在 TS 路线图上有更多选项。类型推断可以轻松处理这类事情,当它失败时,您可以显式调用foo&lt;FooModel&gt;,它仍然是类型安全的。

    【讨论】:

      【解决方案2】:

      你为什么不直接使用 Parent 类作为你的函数的类型,像这样:

      class ChildA extends Parent {
      
      }
      
      class ChildB extends Parent {
      
      }
      
      function beAwesomeParent(parent: Parent) {
          parent.isCool = true;
      }
      
      var childA = new ChildA();
      beAwesomeParent(childA);
      

      在 TS Playground 上测试没有错误。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-03-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2020-10-05
        • 2011-12-28
        • 2014-03-27
        相关资源
        最近更新 更多