代码是:
const foo = (foo: string) => {
const result = []
result.push(foo)
}
我收到以下TS错误:
[ts]类型'string'的参数不能分配给'never'类型的参数。
我在做什么错?这是错误吗?
答案 0 :(得分:44)
您要做的就是将result
定义为字符串数组,如下所示:
const result : string[] = [];
答案 1 :(得分:14)
我在使用ReactJs Hook的ReactJS无状态函数中遇到相同的错误 useState。 我想设置对象数组的状态,所以如果我使用以下方式
const [items , setItems] = useState([]);
并像这样更新状态:
const item = { id : new Date().getTime() , text : 'New Text' };
setItems([ item , ...items ]);
我遇到错误:
“'{id:number;文字:任何}'不能分配给'never'类型的参数
但是如果这样做,
const [items , setItems] = useState([{}]);
错误消失了,但是在 0索引处有一个项目没有任何数据(不需要)。
所以我找到的解决方案是:
const [items , setItems] = useState([] as any);
答案 2 :(得分:12)
我使用ReactJS useState钩在ReactJS函数组件中遇到了相同的错误。解决方案是在初始化时声明useState的类型:
const [items , setItems] = useState<IItem[]>([]); // replace IItem[] with your own typing: string, boolean...
答案 3 :(得分:10)
我找到的解决方案是
const [files, setFiles] = useState([] as any);
答案 4 :(得分:5)
这似乎是最近的回归或打字稿中的某些奇怪行为。如果您有代码:
const result = []
通常,您将其视为:
const result:any[] = []
但是,如果您在tsconfig中同时具有noImplicitAny
为假,和 strictNullChecks
为真,则将其视为:
const result:never[] = []
此行为违抗所有逻辑,恕我直言。启用空检查会更改数组的条目类型?然后打开noImplicitAny
实际上会恢复any
的使用,而不会发出任何警告?
当您真正拥有any
的数组时,就不需要用额外的代码来表示它。
答案 5 :(得分:1)
您需要在字符串result
的数组中键入const result: string[] = [];
。
答案 6 :(得分:1)
另一种方法是:
it
答案 7 :(得分:1)
从 “ compilerOptions” 中删除 “ strictNullChecks”:true 或在中将其设置为false Ng应用的> tsconfig.json 文件。这些错误将像任何东西一样消失,您的应用程序将成功编译。
免责声明 :这只是一种解决方法。仅当未正确处理空值检查时才会出现此错误,无论如何这都不是完成任务的好方法。
答案 8 :(得分:0)
我可以使用Array关键字而不是空括号来克服此问题:
const enhancers: Array<any> = [];
使用:
if (typeof devToolsExtension === 'function') {
enhancers.push(devToolsExtension())
}
答案 9 :(得分:0)
另一个错误原因。
如果在使用connect()()包裹组件之后导出,则道具可能会出现打字错误
解决方案:我没有做太多探索,因为我可以选择使用useSelector钩子替换connect函数
例如
my_instance.class_variable
答案 10 :(得分:0)
错误:“any”类型的参数不能分配给“never”类型的参数。
在 tsconfig.json -
"noImplicitReturns": false,
"strictNullChecks":false,
解决方案:输入'never'
答案 11 :(得分:0)
您也可以添加as string[]
const foo = (foo: string) => {
const result = []
(result as string[]).push(foo)
}
当它是对象的一部分时我就这样做了
let complexObj = {
arrData : [],
anotherKey: anotherValue
...
}
(arrData as string[]).push('text')
答案 12 :(得分:0)
如果您不知道将填充数组的值的类型,您可以这样做,result 将推断类型。
const result: any[] = []