代码是:
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 [files, setFiles] = useState([] as any);
其他回答
你也可以添加字符串[]
const foo = (foo: string) => {
const result = []
(result as string[]).push(foo)
}
当它是物体的一部分时,我就这么做了
let complexObj = {
arrData : [],
anotherKey: anotherValue
...
}
(arrData as string[]).push('text')
const foo = (foo: string) => {
const result: string[] = []
result.push(foo)
}
您需要指定数组是什么,因为result =[]的返回类型为任意[]。通常情况下,你想要避免任何类型,因为根据微软的说法,它们意味着被用作“逃生舱口”。
结果是一个字符串数组的对象。
你所要做的就是将结果定义为一个字符串数组,如下所示:
const result : string[] = [];
如果没有定义数组类型,默认情况下将为never。因此,当您尝试向它添加字符串时,它是类型不匹配,因此抛出您所看到的错误。
我得到的错误时定义(初始化)一个数组如下:
let mainMenu: menuObjectInterface[] | [] = [];
我得到的问题的代码:
let mainMenu: menuObjectInterface[] | [] = [];
dbresult.rows.forEach((m) => {
if (!mainMenu.find((e) => e.menucode === m.menucode)) {
// Not found in mainMenu, yet
mainMenu.push({menucode: m.menucode, menudescription: m.menudescription}) // Here the error
}
})
错误是:TS2322:类型“any”不能赋值给类型“never”
原因是数组初始化时也选择了空数组。 Typescript看到了一个push到类型,该类型也可以为空。因此出现了错误。
将行改为这样修正了错误:
let mainMenu: menuObjectInterface[] = [];
我能够通过使用Array关键字而不是空括号来解决这个问题:
const enhancers: Array<any> = [];
使用:
if (typeof devToolsExtension === 'function') {
enhancers.push(devToolsExtension())
}