2014-05-03 2 views
0

Я пишу библиотеку в машинописи и должны держать некоторые APIмашинопись модуль как функция

_(1).seconds() 

вещь, что _ является модулем, и в предыдущей реализации было похоже, что

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

Можно ли реализовать то же самое в машинописи?

ответ

1

Вот один из способов рассмотреть его, и иметь работу по завершению/intellisense. Есть несколько вариантов, которые будут ближе к исходной реализации 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); 

Выходной сигнал будет 5 в seconds делит исходное число на 1000.

Если вам нужна функция будет доступна как:

_.seconds 

, а также:

_().seconds() 

Ваши варианты становятся все более ограниченным, поскольку в то время как машинопись поддерживает расширяя Function экземпляр со свойствами, IntelliSense Безразлично не работает:

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

_["seconds"] = (val:number) : number => { 
    return val/1000; 
} 
Смежные вопросы