只是好奇是Typecripts Promise< GenericType>
中的泛型类型是否定义了传递给 then
处理程序的对象的类型?
例如,这有效:


 const pr:Promise< Array< Number>> = Promise.resolve([1,2,3]);

 const handler =(arg:Array< Number>)=> {
 console.dir(ARG);
 }

 pr.then(handler);



 另一个相关的问题。如果我们使 handler
成为处理程序:Function
,那么vscode会在代码的 pr.then(handler
部分)下抱怨/绘制红色波形。 typescript有一个可以分配给处理函数的类型吗?
答案 0 :(得分:1)
只是想验证GenericType部分是返回类型,它是promise执行的异步操作的结果吗?
不完全。你的例子中没有泛型类型:你已经给出了一切具体的类型。
你想要的(我认为)是这样的:
const pr:Promise<Array<Number>> = Promise.resolve([1, 2, 3]);
// handler here is declared with type Array<Number> -> void
const handler = (arg:Array<Number>): void => { // NOTE: void
console.dir(arg);
}
pr.then(handler);
说明类型保存(及其必要性):
// doubleToString has type Number -> String
const doubleToString = (n: Number): String => (n * 2).toString();
const doubledAndStringed: Promise<Array<String>> = pr.then(arr => arr.map(doubleToString));
以下失败:
const repeatString = (s: String): String => s.repeat(1);
const repeated: Promise<Array<String>> = pr.then(arr => arr.map(repeatString))
如果你有一个函数根据它的参数类型返回一个Promise,你可以使用泛型类型:
const wrap = (x: T): Promise<T> => Promise.resolve(x);
此处T
是泛型类型,typescript将保留参数的特定类型:
const wrappedString: Promise<String> = wrap('hello!');
此处wrappedString
将具有该具体类型,无论您是否注释它。