代码是:

const foo = (foo: string) => {
  const result = []
  result.push(foo)
}

我得到以下TS错误:

string类型的实参不能赋值给never类型的形参。

我做错了什么?这是一个bug吗?


当前回答

你也可以添加字符串[]

const foo = (foo: string) => {
  const result = []
  (result as string[]).push(foo)
}

当它是物体的一部分时,我就这么做了

let complexObj = {
arrData : [],
anotherKey: anotherValue
...
}
(arrData as string[]).push('text')

其他回答

在使用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);

你所要做的就是将结果定义为一个字符串数组,如下所示:

const result : string[] = [];

如果没有定义数组类型,默认情况下将为never。因此,当您尝试向它添加字符串时,它是类型不匹配,因此抛出您所看到的错误。

你需要输入result到字符串const result的数组:string[] =[];。

另一种方法是:

const result: any[] = [];

错误:“any”类型的实参不能赋值给“never”类型的形参。

在tsconfig。json -

  "noImplicitReturns": false,

   "strictNullChecks":false,

解决方案:输入'never'