辛格尔顿装饰在打字稿

问题描述:

我想使用此代码:辛格尔顿装饰在打字稿

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()) 

和它的作品。消息“你好!”显示在控制台中。但打字稿编译器说有错误:enter image description here

怎么了?

+1

很可能编译器不希望装饰器将“类”的类型更改为对象的类型。而且他在那里的公司很好 - 你不应该这样做。要写单例,使用'const SomeClass = {public method():string { return'Hello!' } };并且完成它! – Bergi

不幸的是,编译器无法知道修饰器对类所做的修改。你可以尝试这样的:

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())