2017-09-02 91 views
0

我正在爲某些js庫編寫打字稿。我需要聲明任意調用裝飾:在Typescript中鍵入可選的可調用裝飾器

@model 
class User {} 

@model() 
class User {} 

@model('User') 
class User {} 

我試圖用ClassDecoratorlib.es6.d.ts但沒有運氣:

我當然可以進行手動輸入的解決方法:

export function model<TFunction extends Function>(target: TFunction): TFunction | void; 
export function model(name?: string): 
    <TFunction extends Function>(target: TFunction) => TFunction | void; 

但是,在這種情況下,如何重複使用現有的ClassDecorator類型?

回答

1

問題是你使用的是聯合類型,這些類型的變量只能有兩種類型的普通成員,所以在這種情況下,由於兩個類型中僅有一個是可調用的,工會將不會調用

你正在尋找一個十字路口類型,這將有兩種類型的成員

export const model: ClassDecorator & CallableModelDecorator; 
+0

它的工作原理!感謝您的解釋。文檔https://www.typescriptlang.org/docs/handbook/advanced-types.html – farwayer