2017-09-04 55 views
1

我想使用此代碼:辛格爾頓裝飾在打字稿

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

回答

1

不幸的是,編譯器無法知道修飾器對類所做的修改。你可以嘗試這樣的:

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