使用transform属性定义Signal input时编译器报错,求分析原因
问题原因
你搞反了input函数的泛型参数顺序,同时转换器的类型和泛型声明不匹配:
- Angular
input函数的泛型定义是<最终Signal类型, 输入原始值类型>,你写的input<string, number>表示:- Signal最终要输出
string类型 - 输入的原始值是
number类型
- Signal最终要输出
- 但你使用的
numberAttribute转换器,作用是把字符串类型的输入值转换成数字类型,它的类型是(value: string | null) => number,和你泛型声明的「输入类型是number、输出类型是string」完全矛盾。 - 编译器报错的直接原因是:初始值
0是number类型,但numberAttribute期望接收string类型的输入值,类型不匹配。
修正方案
你想要的应该是「输入可以是字符串形式的数字,经过转换器转成number类型,最终Signal输出number」,所以正确的写法有两种:
写法一:明确泛型参数(推荐)
foo = input<number, string>(0, {transform: numberAttribute });
这里泛型<number, string>表示:最终Signal是number类型,输入的原始值是string类型,和numberAttribute的转换逻辑匹配。
写法二:省略泛型,让编译器自动推断
foo = input(0, {transform: numberAttribute });
编译器会根据初始值0和numberAttribute的类型,自动推断出Signal的类型是number,输入值可以是string或number。
内容的提问来源于stack exchange,提问作者Matthieu Riegler
相关产品推荐
相关产品推荐

