Angular自定义管道中async函数返回字符串符合Promise<string>类型原因咨询
问题描述
编写Angular自定义管道时遇到以下代码,为何是合法的?
async transform(value: any): Promise<string> { let fullNameBasedOnPreference: string; fullNameBasedOnPreference = value.property; return fullNameBasedOnPreference; }
原因说明
1. TypeScript 语法层面合规
async关键字修饰的函数,JS/TS 运行时会自动将返回值封装为Promise对象:哪怕你显式返回的是普通字符串类型变量,运行时会自动把这个值包装为已决议的Promise实例,和你声明的返回值类型Promise<string>完全匹配,不存在类型冲突。- 上述代码的运行效果和下面的写法完全等价:
transform(value: any): Promise<string> { let fullNameBasedOnPreference: string = value.property; return Promise.resolve(fullNameBasedOnPreference); }
2. Angular 管道规则层面合规
- Angular 本身没有对
transform方法的返回值类型做强制限制,支持返回包括Promise、Observable在内的任意类型。如果管道返回异步值,只需要在模板使用时配合async管道消费返回值即可,管道定义本身完全符合Angular的规则要求。
内容的提问来源于stack exchange,提问作者shix
相关产品推荐
相关产品推荐

