我漏掉了一些用打字稿写的东西,我需要帮助
const onClick = (name: string) => {
dialogFuncMap[`${name}`](true);
};
const onHide = (name: string) => {
dialogFuncMap[`${name}:any`](false);
};
发布于 2022-06-24 07:18:42
解决方案1
下列各点应能发挥作用。关键是将name
声明为dialogFuncMap
的键,而不仅仅是string
。这是因为与dialogFuncMap
关联的类型有预定义的索引,它们的类型应该是相同的。注意,现在name
被声明为name: DialogFuncMapKeys
。
const hello = (value: boolean) => console.log('hello')
const world = (value: boolean) => console.log('world')
const dialogFuncMap = {
hello: hello,
world: world,
}
type DialogFuncMapKeys = keyof typeof dialogFuncMap // <- Here
const onClick = (name: DialogFuncMapKeys) => { // <- Here
dialogFuncMap[`${name}`](true)
}
const onHide = (name: DialogFuncMapKeys) => { // <- Here
dialogFuncMap[`${name}`](false)
}
onClick('hello')
onHide('world')
解决方案2
另一种解决方案是将dialogFuncMap
键本身声明为string
类型,如Record<string, (value: boolean) => void>
。下面看一看:
const hello = (value: boolean) => console.log('hello')
const world = (value: boolean) => console.log('world')
const dialogFuncMap: Record<string, (value: boolean) => void> = { // <- Here
hello: hello,
world: world,
}
const onClick = (name: string) => {
dialogFuncMap[`${name}`](true)
}
const onHide = (name: string) => {
dialogFuncMap[`${name}`](false)
}
onClick('hello')
onHide('world')
https://stackoverflow.com/questions/72732344
复制相似问题