代码是:
const foo = (foo: string) => {
const result = []
result.push(foo)
}
我得到以下TS错误:
string类型的实参不能赋值给never类型的形参。
我做错了什么?这是一个bug吗?
代码是:
const foo = (foo: string) => {
const result = []
result.push(foo)
}
我得到以下TS错误:
string类型的实参不能赋值给never类型的形参。
我做错了什么?这是一个bug吗?
当前回答
const foo = (foo: string) => {
const result: string[] = []
result.push(foo)
}
您需要指定数组是什么,因为result =[]的返回类型为任意[]。通常情况下,你想要避免任何类型,因为根据微软的说法,它们意味着被用作“逃生舱口”。
结果是一个字符串数组的对象。
其他回答
在使用ReactJS Hook时,我在ReactJS无状态函数中出现了同样的错误 useState。 我想设置一个对象数组的状态,如果我用下面的方法
const [items , setItems] = useState([]);
并像这样更新状态:
const item = { id : new Date().getTime() , text : 'New Text' };
setItems([ item , ...items ]);
我得到了错误: 类型为'{id: number;any}'不能赋值给类型为'never'的形参
但如果这样做,
const [items , setItems] = useState([{}]);
错误消失了,但有一个项目在0索引没有任何数据(不想要)。
所以我找到的解决方案是:
const [items , setItems] = useState([] as any);
你需要输入result到字符串const result的数组:string[] =[];。
错误:“any”类型的实参不能赋值给“never”类型的形参。
在tsconfig。json -
"noImplicitReturns": false,
"strictNullChecks":false,
解决方案:输入'never'
我能够通过使用Array关键字而不是空括号来解决这个问题:
const enhancers: Array<any> = [];
使用:
if (typeof devToolsExtension === 'function') {
enhancers.push(devToolsExtension())
}
你所要做的就是将结果定义为一个字符串数组,如下所示:
const result : string[] = [];
如果没有定义数组类型,默认情况下将为never。因此,当您尝试向它添加字符串时,它是类型不匹配,因此抛出您所看到的错误。