【发布时间】:2017-01-17 02:51:48
【问题描述】:
在下面的示例中,Promise::then 访问者函数 f 期望收到 Example。如果我显式传入一个缺少属性的格式错误的对象,我会收到一个类型错误。
但是,如果我只是将函数 f 传递给 .then(f),则不会出现类型错误,即使 typescript 知道 Promise<T> 中 T 的类型不是 Example。
interface Example {
id: number
age: number
}
interface Promise <T> {
then <U> ( f: ( a: T) => U ) : Promise<U>
}
function f(s:Example){
return s.age
}
var p : Promise<{ id: number }>
p.then(f) // no type error (bad)
p.then(function(a){
f(a) // type error (good)
})
我想知道为什么会发生这种情况,还有在 Typescript 中减轻许可类型检查的技术。
如果双变量解释了这种现象,那么为什么在显式应用f 时会出现类型错误?为什么第一类函数与显式应用程序的规则不同?
【问题讨论】:
-
@artem 我不认为这是由双变量引起的。但我可能是错的。
标签: generics typescript functional-programming