Angular @Input字符串数组被识别为string报TS2322错误如何解决
问题原因
这个报错和filter方法无关,问题出在父组件模板的传值方式上:
Angular中使用{{ }}插值语法传递值时,会自动将所有非字符串类型的值调用toString()方法转为字符串,你传递的searchResult数组会被隐式转换为逗号拼接的字符串,和子组件@Input()要求的string[]类型不匹配,所以触发TS2322报错。你观察到的"filter返回字符串"只是插值转换后的结果,不是filter方法的真实返回值。
解决方案
把父组件模板中的插值传值改为Angular的方括号属性绑定,该方式会直接传递变量的原始类型,不会做隐式转换:
<!-- 修改前 错误写法 --> <child-component searchResult="{{searchResult}}"></child-component> <!-- 修改后 正确写法 --> <child-component [searchResult]="searchResult"></child-component>
绑定规则补充
- 传递静态字符串、不需要保留原始类型的内容,可以使用不带方括号的属性赋值或插值绑定
- 传递数字、布尔值、数组、对象等复杂类型,必须使用
[]属性绑定才能保留原始数据类型
内容的提问来源于stack exchange,提问作者0kMike
相关产品推荐
相关产品推荐

