我有以下打字稿方法:
authorize(permission: string, id?: number) : Observable<boolean> {
return this.authorize(Permission[permission], id);
}
authorize(permission: Permission, id?: number) : Observable<boolean> {
// authorization code
}
第一个接收String类型的权限,并将其转换为Permission枚举类型。
然后调用第二个接受枚举Permission类型的权限的方法。
但是我得到了错误:
Duplicate function implementation.
似乎Typescript忽略了参数类型。
有没有办法克服这个问题?
TypeScript的包含此类注释的静态类型系统在编译为JavaScript时为erased,这实际上是在运行。因此,您提议的内容最终将编译为类似(假设ES2017)
class Thingy {
authorize(permission, id) {
return this.authorize(Permission[permission], id);
}
authorize(permission, id) {
// authorization code
}
}
在JavaScript中,不能有两个具有相同名称的方法...好吧,你[[can,但是只会调用第二个方法。因此这种方法行不通。
但是,在您的示例中,不必要重载,因为您可以将两个签名的组合表示为单个签名,其permission
参数是union和string
的Permission
。而且尽管我不知道Permission
是什么(这就是minimum reproducible examples有用的原因),但只要它不是string
的类型别名,您就可以按照您想要的方式进行分支实现:] >
authorize(permission: string | Permission, id?: number): Observable<boolean> {
if (typeof permission === "string") {
return this.authorize(Permission[permission], id);
} else {
// authorization code
}
好的,希望能有所帮助;祝你好运!