1
看来我遇到了TS编译器的一个奇怪的边缘情况,当涉及到类型推断时。下面的代码(和注释行一样)应该(我相信)会产生一个编译错误,但实际上并没有。TypeScript多余的字段检查和类型推断错误
interface IReturned {
theField?: string;
}
interface IFactory {
(): IReturned;
}
var factory : IFactory = function() /* : IReturned */{
return {
BROKEN: 'ERROR'
}
};
var instance = factory();
// instance.BROKEN;
什么理想情况下应该发生的是,工厂函数的返回类型推断为IReturned,这意味着它是一个编译错误返回一个对象文本与它过多的领域,因此,在设置了“破”属性应该不是有效的。
如果使用IReturned将函数显式注释为其返回类型,则确实会发生这种情况。 “实例”变量的类型也被正确推断,并且试图访问下面一行中的“断开”字段也是一个错误。
我失去了一些东西在这里?有没有办法让这个工作无需在任何地方添加冗余类型定义?