如何解决以下类型错误?
“查询”类型的参数不能分配给“输入”类型的参数。类型“查询”中缺少索引签名。(2345)
我将df1[, 2]
类型用作查询字符串的通用类型(全称)。当我输入Input
类型的输入时,会引发错误,但基础的JavaScript代码运行得很好。
Query
答案 0 :(得分:4)
type
代替interface
这是因为类型[key: string]: string
与您的Query
接口不兼容,后者的接口包含两个允许的键:lorem
和ipsum
,而前一个包含任何任意字符串作为键。通常,这是TypeScript接口的问题:特定的接口无法保存到更通用的接口中。
但是,可以将特定类型保存为更通用的类型,因此一种快速的解决方案是将界面简单地转换为类型:
type Query = {
lorem: "0" | "1"
ipsum: string
}
const query: Query = {
lorem: "0",
ipsum: "Hello world"
}
type Input = {
[key: string]: string
}
const test = (input: Input) => {
return input["lorem"]
}
test(query)
test()
另一种解决方案将简单地保留接口,但在将变量query
传递到test()
之前,使用ES6对象散布来解构/扩展变量{ ...query }
。这样,您将强制TypeScript将test(query)
识别为可索引的。
此解决方案很聪明,但有点破绽,因为您可能必须在代码中添加注释以解释为什么不能只使用test({ ...query })
而不是interface Query {
lorem: "0" | "1"
ipsum: string
}
const query: Query = {
lorem: "0",
ipsum: "Hello world"
}
interface Input {
[key: string]: string
}
const test = (input: Input) => {
return input["lorem"]
}
test({ ...query })
:
{{1}}
有an extended thread on discussion on TypeScript's GitHub repo:可能是一个阅读更多有关它的好地方。