【发布时间】:2018-02-10 05:45:24
【问题描述】:
我想知道为什么 Promise<T> 不接受两个参数,例如:Promise<T1,T2>。
例如:
new Promise(function(resolve,reject){
...
err ? reject(err) : resolve(val);
});
=> ????????????如何告诉消费者关于 err 和 val 类型的承诺? ????????????
我希望T1 是Error 类型,T2 是val 的类型。
为什么 Promise 不接受两个类型参数?因为官方只取一个,所以我假设参数是传递给resolve()的值的类型?是否只有一个参数,因为我们希望始终将 Error 类型传递给 reject()?
更详细地说,我们可以传递一个字符串来拒绝:
new Promise(function(resolve,reject){
let err = 'just a string, not an object';
let val = {foo:'bar'};
err ? reject(err) : resolve(val);
});
请注意,我们可以将错误强制转换为某种类型,如下所示:
return function(){
return Promise.resolve('whatever')
.catch(function(){
return Promise.reject('always a string');
});
}
所以错误总是anything 这不是真的吗?似乎我们知道错误将是上面示例中的字符串...
【问题讨论】:
-
reject 的类型为
(reason? :any) => void,因此您可以发送任何内容。 -
如果能指定拒绝原因的类型就好了。但是为什么它不是由打字稿开发人员制作的,所以 SO 无法帮助您。
-
SO 不会对标题的措辞提出“为什么”问题。 :) 你在帖子中的最后一个问题会是一个更好的标题。如何指定一个承诺的拒绝原因是可以帮助你的。这是一个你无法回答的不,但仍然不那么模棱两可。 :)
-
@AlexanderMills 以防我太微妙,我之前的回答是敦促您更改帖子的标题。 :D
-
也许在未来的某个时候。目前,据我所知,没有办法使泛型声明中的一种类型成为可选,并且您不能使用不同的参数两次定义相同的接口。此更改会破坏大量代码。
标签: node.js typescript promise typescript2.3