发布
社区首页 >问答首页 >元素隐式具有'any‘类型,因为类型’${any}‘的表达式不能用于索引类型。

元素隐式具有'any‘类型,因为类型’${any}‘的表达式不能用于索引类型。
EN

Stack Overflow用户
提问于 2022-06-23 14:58:28
回答 1查看 47关注 0票数 1

我漏掉了一些用打字稿写的东西,我需要帮助

代码语言:javascript
复制
   const onClick = (name: string) => {
      dialogFuncMap[`${name}`](true);
    };

    const onHide = (name: string) => {
      dialogFuncMap[`${name}:any`](false);
    };
EN

Stack Overflow用户

发布于 2022-06-24 07:18:42

解决方案1

下列各点应能发挥作用。关键是将name声明为dialogFuncMap的键,而不仅仅是string。这是因为与dialogFuncMap关联的类型有预定义的索引,它们的类型应该是相同的。注意,现在name被声明为name: DialogFuncMapKeys

代码语言:javascript
复制
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>。下面看一看:

代码语言:javascript
复制
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')
票数 1
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72732344

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档