2016-09-30 97 views
0

在打字稿,我想創建一個將導出中添加了額外的功能,像這樣一個功能的模塊:如何輸入附加功能作爲屬性附加的功能對象?

export default function log(msg: string) { 
    console.log(msg); 
} 

//Property 'warn' does not exist on type '(msg: string) => void'. 
log.warn = function(msg: string) { 
    console.warn(msg); 
}; 

這樣做的使用可能看起來像:

log('test'); 
log.warn('test'); 

我如何告訴TypeScript我的函數對象上有其他屬性,以便它不會拋出Property 'warn' does not exist on type '(msg: string) => void'.

回答

1

你可能會這樣寫:

function log(msg: string) { 

} 
namespace log { 
    export function warn(omen: string) { } 
} 

export default log; 
1

像這樣:

const log: { (msg: string): void; warn?: Function; } = function (msg: string) { 
    console.log(msg); 
} 

log.warn = function (msg: string) { console.warn(msg); }; 

export default log; 

換句話說,具有特性的功能類型可以聲明爲

type FuncWithProp = { 
    (FUNC_PARAMS): FUNC_RETURN_TYPE; 
    YOUR_PROP_HERE: SOME_TYPE; 
}; 

如果您想要更緊密地鍵入附加函數以獲取字符串並輸出它們,並允許附加的字符串,然後

type Logger = { 
    (msg: string): void; 
    warn?: Logger; 
    error?: Logger; 
}; 

const log: Logger = function... 
log.warn = function... 
export default log; 
+0

我真的希望最後一個例子能夠正常工作,但我得到了:'Type'(msg:string)=> void'不能分配給類型'{(msg:string):void; [level:string]:(msg:string)=> void; }」。 類型'(msg:string)=> void'中缺少索引簽名。 const log:Logger ' – ccnokes