2014-09-04 3 views
0

Я думаю, что у меня возникла ошибка в разрешении перегрузки функции типа TypeScript. Вот пример:Ошибка перегрузки функции типаScript

class Container<T> 
{ 
    constructor(public value: T) { } 
} 

function unwrap<T>(value: Container<T>): T; 
function unwrap<T>(value: T): T; 
function unwrap(obj) { 
    if (obj instanceof Container) { 
     return obj.value; 
    } else { 
     return obj; 
    } 
} 

// Inferred type of "a" should be number, but is in fact Container<number> 
var a = unwrap(new Container<number>(1)); 
var b = unwrap(2); 
var c = a.toFixed(); // causes compile error 

По моему пониманию правил в разрешении перегрузки в разделе 4.12.1 языковой машинописи спецификации, оператор присваивания «а» следует использовать первую перегрузку UnWrap, и уступка «б "следует использовать вторую перегрузку. Таким образом, оба «a» и «b» должны иметь предполагаемый тип «число». Однако на самом деле компилятор использует вторую разворотную перегрузку для обоих вызовов, поэтому предполагаемый тип «a» равен Container<number>, и поэтому присваивание «c» не скомпилируется. Это ошибка, или я неправильно понял правила перегрузки?

Я по-прежнему использую TypeScript 0.9.0.1, потому что мой проект требует его совместимости, так что, возможно, это уже исправлено в более новой версии?

ответ

Смежные вопросы