理解Typescript中的复杂类型声明
查看此类型声明的示例:理解Typescript中的复杂类型声明,typescript,types,visual-studio-code,typescript2.0,typescript2.3,Typescript,Types,Visual Studio Code,Typescript2.0,Typescript2.3,查看此类型声明的示例: export interface Thenable<R> { then<U>(onFulfilled?: (value: R) => U | Thenable<U>, onRejected?: (error: any) => U | Thenable<U>): Thenable<U> then<U>(onFulfilled?: (value: R) => U | Th
export interface Thenable<R> {
then<U>(onFulfilled?: (value: R) => U | Thenable<U>, onRejected?: (error: any) => U | Thenable<U>): Thenable<U>
then<U>(onFulfilled?: (value: R) => U | Thenable<U>, onRejected?: (error: any) => void): Thenable<U>
catch<U>(onRejected?: (error: any) => U | Thenable<U>): Thenable<U>
}
在这种情况下,val1
是一种可能性/承诺
const val2 = await announce(..)
val2
的类型为messagesAndResponse
我的问题是,我不理解以下关于Thenable
接口的内容:
Thenable
是什么意思?我知道U
是一种泛型,但是Thenable
是什么意思?还有什么写的方法then
和catch
的接口类型和返回值都属于Thenable
类型。它看起来像是在说它返回自己,我认为这是正确的,因为一个thenable可以返回另一个thenable,但是如果它说它返回thenable
,它怎么知道它知道解析是MessagesSemdResponse
?IDE中是否有用于此的内置功能表格
表示您有一个对象,可以从中获取类型为t
的值或者,如果将其命名为
Promise
,则会得到一个类型为T
的值
由于承诺通常用于异步操作,因此承诺不会“返回值”,而是提供一个api,用于在该值可用时获取该值的引用
then
/catch
返回Thenable
的原因是您可以链接调用:
announce(...).then(value => {
...
}).catch(error => {
...
});
当值可用或出现问题时,将调用传递给然后
/catch
的函数
then
/catch
返回的承诺与调用函数的承诺不同,它是一个新实例,编译器根据传递的函数的返回值推断此新承诺的泛型类型,例如:
const fn = (): Promise<string> => {
return Promise.resolve("43");
}
fn().then(str => Number(str)).then(num => console.log(num))
已履行:一种函数,它需要一个
R
类型的值,并将U
类型的值或表格
返回到U
被拒绝:一种函数,它需要一个
any
类型的值,并将U
类型的值或Thenable
返回到U
返回:类型为
U
的值的Thenable
实例,是执行oncompleted
或onRejected
的结果,表示您有一个对象,可以从中获取类型为T
或者,如果将其命名为
Promise
,则会得到一个类型为T
的值
由于承诺通常用于异步操作,因此承诺不会“返回值”,而是提供一个api,用于在该值可用时获取该值的引用
then
/catch
返回Thenable
的原因是您可以链接调用:
announce(...).then(value => {
...
}).catch(error => {
...
});
当值可用或出现问题时,将调用传递给然后
/catch
的函数
then
/catch
返回的承诺与调用函数的承诺不同,它是一个新实例,编译器根据传递的函数的返回值推断此新承诺的泛型类型,例如:
const fn = (): Promise<string> => {
return Promise.resolve("43");
}
fn().then(str => Number(str)).then(num => console.log(num))
已履行:一种函数,它需要一个
R
类型的值,并将U
类型的值或表格
返回到U
被拒绝:一种函数,它需要一个
any
类型的值,并将U
类型的值或Thenable
返回到U
返回:类型为
U
的值的表格的一个实例,它是执行onCompleted
或onRejected
第1部分的结果:
export interface Thenable<R> {
它有方法then
,该方法采用两个参数oncompleted
和onRejected
,该方法本身是通用的-它依赖于另一种类型的参数U
第三部分,最有趣的一个:
oncompleted
使用以下类型声明:
(value: R) => U | Thenable<U>
(值:R)=>U |表格
这意味着它要么是一个接受R
并返回U
的函数,要么是另一个表格
这里是R
和U
之间的关系:如果您有Thenable
,则它是,然后方法接受一个回调,该回调使用R
类型的值(原始Thenable生成的值)调用,并且应该返回U
。或者它可以接受另一个表格
这个then
方法的返回值是Thenable
简言之,这就是如何用类型描述承诺链。第1部分:
export interface Thenable<R> {
它有方法then
,该方法采用两个参数oncompleted
和onRejected
,该方法本身是通用的-它依赖于另一种类型的参数U
第三部分,最有趣的一个:
oncompleted
使用以下类型声明:
(value: R) => U | Thenable<U>
(值:R)=>U |表格
这意味着它要么是一个接受R
并返回U
的函数,要么是另一个表格
这里是R
和U
之间的关系:如果您有Thenable
,它是,那么方法接受一个c