ts 中 函数 参数 第二个参数 需要第一个参数作为类型 如何 处理?

后边那些是 一些对象 event

使用这种方式按理来说 这样写e 应该是有提示的 但是没有任何提示 case 中 不是确定了 是哪个key吗?
image.png

这个是使用, 看着没有问题
image.png

如何处理 使得 在case中有对应key 的提示呢?

示例
这有个示例 1. 会有报错 2. 也没有对应的类型 提示 对应 case 的类型提示

阅读 3k
2 个回答

这样子判断key是没办法收窄类型:

参照文复杂类型的收窄https://www.typescriptlang.or...

如:

interface OnScale {
    type: 'scale',
    ...
}

interface OnClick {
    type: 'click',
    ...
}

type CustomEvent = OnClick | OnScale

function handle(event: CustomEvent) {
    if (event.type === 'click') {
        // todo
    }
}

// 调用
handle({
    type:'click',
    // click事件的一些参数
})

你定义startEvent的时候,先是解析泛型T,这时key的类型T对应的Moveableevents的索引类型相当于'scale'|'click|...'等等字符串字面量类型,e对应的的OnScale|Onclick|...等等事件类型,再进入函数体中,switch case语句实际上是对key类型进行判断,e和key的类型对于编译器来说是没有关系的。当你下面执行startevent的时候,key被赋值为'dragstart',泛型T此时将被确定为字面量类型'dragstart',故而e的类型也跟随T收缩。你如果想在case中获得e事件相关提示,我建议你直接对e相关属性进行判断。我感觉你这种写法不太合理,不知道使用场景能具体一点吗

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题