2014-05-03 71 views
0

我寫的打字稿圖書館,必須保持一些API打字稿模塊功能

_(1).seconds() 

的事情是,_是一個模塊,而在以前的實現均是如此

module.exports = valueFunction; 
module.exports.seconds = seconds; 

是否可以在打字稿中實現相同的功能?

回答

1

這裏有一種方法可以考慮分解它,並完成代碼完成/智能感知工作。有幾個選擇可能會更接近原始的JavaScript實現,但是,讓代碼完成起作用可能有點困難。

導出主要功能_,並返回一個名爲Chained的導出類。它在class中,其中掛起_返回值的函數將存在。

在實現文件(sample.ts):

export class Chained { 
    constructor(private val: number) { 
    } 
    seconds(): number { 
     return this.val/1000; 
    } 
} 

export function _(val: number): Chained { 
    return new Chained(val); 
} 

然後在使用中:

/// <reference path="sample.ts" /> 

import sample = require('./sample'); 
// create a simple alias for the exported _ function: 
import _ = sample._; 

var val = _(5000).seconds(); 
console.log(val); 

輸出將是5seconds1000將原始數。

如果您需要的功能可用,如:

_.seconds 

還有:

_().seconds() 

您的選擇變得同時打字稿支持延伸的Function實例與性能,智能感知沒有按較爲有限't work:

// this won't work well: 
export function _(val:number) : Chained { 
    return new Chained(val); 
} 

_["seconds"] = (val:number) : number => { 
    return val/1000; 
}