Typescript Promise <GenericType>定义中的GenericType参数是什么?

时间:2018-06-08 11:16:40

标签: javascript typescript promise

只是好奇是Typecripts Promise&lt; GenericType&gt; 中的泛型类型是否定义了传递给 then 处理程序的对象的类型?

&#xA; &#xA;

例如,这有效:

&#xA;&#xA;
  const pr:Promise&lt; Array&lt; Number&gt;&gt; = Promise.resolve([1,2,3]);&#xA;&#xA; const handler =(arg:Array&lt; Number&gt;)=&gt; {&#XA; console.dir(ARG);&#XA; }&#XA;&#XA; pr.then(handler);&#xA;  
&#xA;&#xA;

另一个相关的问题。如果我们使 handler 成为处理程序:Function ,那么vscode会在代码的 pr.then(handler 部分)下抱怨/绘制红色波形。 typescript有一个可以分配给处理函数的类型吗?

&#xA;

1 个答案:

答案 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将具有该具体类型,无论您是否注释它。