首页 > 解决方案 > TypeScript 中默认的通用约束

问题描述

我正在使用带有 Angular 的 TypeScript 2.7.2。我已经在谷歌上搜索了一段时间以了解我们如何为通用约束指定默认类型。

class BaseComponentModel {
}

class BaseComponent<T extends BaseComponentModel = BaseComponentModel> {

   @Input()
   public model: T;

}

class ButtonComponentModel {
}

class ButtonComponent extends BaseComponent<ButtonComponentModel> {
}

上面的代码失败了。

标签: angulartypescript

解决方案


我想我也许能猜到你的错误,但首先要做到这一点;关于泛型的代码很好。

我猜你的错误是关于实验性装饰器的,你可以用你的tsconfig.json文件来抑制它:

{
    "compilerOptions": {
        "experimentalDecorators": true
    }
}

使用此标志,我没有错误,使用以下迷你测试应用程序。

包.json

{
  "name": "test",
  "scripts": {
    "tsc": "tsc"
  },
  "dependencies": {
    "@angular/core": "6.0.4",
    "rxjs": "^6.2.1",
    "zone.js": "^0.8.26"
  },
  "devDependencies": {
    "typescript": "2.7.2"
  }
}

tsconfig.json

{
    "compilerOptions": {
        "experimentalDecorators": true
    },
    "exclude": [
        "node_modules"
    ]
}

应用程序.ts

import {Component, Input} from '@angular/core';

class BaseComponentModel {
}

class BaseComponent<T extends BaseComponentModel = BaseComponentModel> {

   @Input()
   public model: T;

}

class ButtonComponentModel {
}

class ButtonComponent extends BaseComponent<ButtonComponentModel> {
}

推荐阅读