javascript - 如何导出多个类型别名?

标签 javascript angular typescript types casting

为了更好的封装,我想创建一个包含多种其他类型的新类型。 entityService 应键入为 OakServiceMapleService,并应包含在 TreeService 内。

您可以在评论中看到一种可能的解决方案。如果我取消注释 garden.component.ts 中的导入并将 TreeService 替换为 OakService | MapleService,它会起作用,但我想要某种父类型,其中包括所有这些。

tree.service.ts

import { OakService } from './oak.service';
import { MapleService } from './maple.service';

export type TreeService = typeof OakService | MapleService;

oak.service.ts

import { BaseService } from './base.service';

@Injectable()
export class OakService extends BaseService {
  constructor() {
    super();
  }
}

ma​​ple.service.ts

import { BaseService } from './base.service';

@Injectable()
export class MapleService extends BaseService {
  constructor() {
    super();
  }
}

garden.component.ts

// import { OakService } from './oak.service';
// import { MapleService } from './maple.service';
import { TreeService } from './parent.service';

@Component()
export class GardenComponent {
  constructor(
    protected entityService: TreeService // OakService | MapleService
  ) {}
}

balcony.component.ts

import { MapleService } from './maple.service';

export class BalconyComponent extends GardenComponent {   
  constructor(
    protected mapleService: MapleService
  ) {
    super(mapleService);   
  }
}

Info: The code above does not work. Your have to use the code inside the comments. The error I've got is not inside balcony.component.ts: ERROR in : Can't resolve all parameters for BaseListComponent in .../garden.component.ts: (?).

最佳答案

可注入(inject)类中的参数类型允许跳过 TypeScript 中的 Angular @Inject 装饰器,并注释用于依赖注入(inject)的构造函数。类型在运行时不存在并且无法注入(inject)。

因此

GardenComponent 无法成为可用组件。由于用作抽象类,因此它不应该具有 @Component 装饰器:

export abstract class GardenComponent {
  constructor(
    protected entityService: TreeService // OakService | MapleService
  ) {}
}

虽然子类应该有@Component:

@Component(...)
export class BalconyComponent extends GardenComponent {   
  constructor(mapleService: MapleService) {
    super(mapleService);
  }
}

构造函数在子类中是必需的,因为父类不包含正确的注释,并且它们的参数不应该具有可见性修饰符,因为 this.entityService 已由父构造函数分配。

关于javascript - 如何导出多个类型别名?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49277439/

相关文章:

javascript - 如何在调用渲染组件之前在浏览器 JSX 编译器中等待

javascript - Chrome 不返回哈希值

javascript - 改变子组件中的数组 prop 是否有效?

javascript - 连续获取之前、今天和明天的日期

typescript - 输入选项的基本返回类型

javascript - 如何删除基本jquery slider bjqs.js插件中标记中的文本内容

angular - 在 angular2 中的延迟加载模块之间共享一个外部模块

javascript - 使用 ng-template 在 Angular 10 中仅显示博客中的相关条目

node.js - VSCode 错误地将 Sequelize findOne 和 findAll 的返回类型推断为 any

javascript - 如何从 yarn.lock 知道当前安装包的版本