2015-05-15 5 views
3

Я вижу этот пример в руководстве Машинопись:Машинопись - Гибридные Типы

interface Counter { 
    (start: number): string; 
    interval: number; 
    reset(): void; 
} 

var c: Counter; 
c(10); 
c.reset(); 
c.interval = 5.0; 

Но когда я пытаюсь сделать c(10); или установить c.interval = 5.0 я получаю ошибку - Не удается установить свойство «интервал» неопределенной

Я знаю, что я могу сделать:

var c: Counter; 
c = function(s: number){ 
return "'" + s + "'"; 
} 

Что отсутствует - (или это в полный пример)?

Update:

There is a similar question - который отвечает на этот вопрос, хотя, я все еще нахожу этот пример свернутый.

+0

Я думаю, что эта книга говорит, что вы можете описать типы таких моделей. Например, функция, которая имеет свойства самой функции, как конструктор со статическими методами. – elclanrs

+0

Конечно, я понимаю, но почему 'c (10)', если я действительно не могу называть 'c' таким образом. Есть промежуточный шаг, который отсутствует. –

+0

Из того, что я понимаю, пример не предназначен для запуска. 'c' может быть любым объектом, который придерживается этого интерфейса. Это просто показывает, что вы можете это сделать. Это то, что я вижу в любом случае. – elclanrs

ответ

5

Чтобы завершить пример из справочника Машинопись:

interface Counter { 
    (start: number): string; 
    interval: number; 
    reset(): void; 
} 

function createCounter():Counter{ 
    var counter = <Counter>function(start:number){}; 
    counter.interval = 123; 
    counter.reset = function(){}; 
    return counter; 
} 

createCounter()(10); 
createCounter().reset(); 

или

var getCounter = createCounter(); 
getCounter(10); 
getCounter.reset(); 
Смежные вопросы