辛格尔顿装饰在打字稿
问题描述:
我想使用此代码:辛格尔顿装饰在打字稿
function singleton<T extends { new() }>(constructor: T): T {
return new constructor()
}
@singleton
export default class SomeClass {
constructor() {}
public method(): string {
return 'Hello!'
}
}
console.log(SomeClass.method())
和它的作品。消息“你好!”显示在控制台中。但打字稿编译器说有错误:
怎么了?
答
不幸的是,编译器无法知道修饰器对类所做的修改。你可以尝试这样的:
function singleton<T>(constructor: new()=> T): T {
return new constructor()
}
export const SomeClass = singleton(class {
constructor() {}
public method(): string {
return 'Hello!'
}
});
console.log(SomeClass.method())
很可能编译器不希望装饰器将“类”的类型更改为对象的类型。而且他在那里的公司很好 - 你不应该这样做。要写单例,使用'const SomeClass = {public method():string { return'Hello!' } };并且完成它! – Bergi