是否可以扩展打字稿或更改其行为?我创建了一个类装饰器@With
,它允许将roles
附加到一个类。这些角色通过定义方法和属性来更改对象原型。 TypeScript没有多重继承,角色提供了某些功能。
我遇到的问题是代码编辑器(Sublime Text 3)和打字稿编译器不知道对原型的修改,并引发了关于不存在的方法/属性的错误。我可以通过在使用角色的每个位置强烈键入定义的方法和属性来解决此问题,但这是很多冗余类型的操作-鼓励我首先创建角色的冗余类型。
我是否可以通过某种方式修改打字稿编译器以实现此目的。下面的代码示例应使其更加清晰。
以下是该角色的代码:
import { Injector } from '@angular/core'
import { ActivatedRoute } from '@angular/router'
export class ActivatedRouteRole {
public route: ActivatedRoute
public injector: Injector
__build__() {
this.route = this.injector.get( ActivatedRoute )
}
}
有关此 build 方法的注释。在对象构造期间,将为每个角色调用此方法。该位发生在下面使用的constructor
的{{1}}中。
这是我要生成的代码:
AbstractComponent
在import { Component } from '@angular/core'
import { With, ActivatedRouteRole } from '@mylib'
@Component({ templateUrl: './my-component.html' })
@With( ActivatedRouteRole )
export class MyComponent extends AbstractComponent {
ngOnInit() {
this.route.paramMap.subscribe( ... )
}
}
中,我引用了ngOnInit
,但这将导致编辑器和打字稿编译器出错。为了避免错误,我可以在this.route
类上声明route
属性,但这也意味着我必须导入MyComponent
,这与 D 背道而驰。不能 R 自发 Y 自己
ActivatedRoute
我是否可以做些什么让编译器知道它应该将import { Component } from '@angular/core'
import { With, ActivatedRouteRole } from '@mylib'
import { ActivatedRoute } from '@angular/router' # <--- NOT DRY
@Component({ templateUrl: './my-component.html' })
@With( ActivatedRouteRole )
export class MyComponent extends AbstractComponent {
public route: ActivatedRoute # <--- NOT DRY
ngOnInit() {
this.route.paramMap.subscribe( ... )
}
}
上声明的所有属性和方法都视为ActivatedRouteRole
的属性,就像通过MyComponent
进行继承一样?