Я думаю, что у меня возникла ошибка в разрешении перегрузки функции типа 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, потому что мой проект требует его совместимости, так что, возможно, это уже исправлено в более новой версии?