toRef 的第二个参数的类型是 never?

作者站长头像
站长
· 阅读数 19
    (alias) toRef<{}, never>(object: {}, key: never): never (+2 overloads)

在编写代码时候发现 toRef 无法传入第二个参数,因为 key 类型被指定成了 never。我在vue官网上没发现有这个定义。。不太确定哪里出现了问题。

回复
1个回答
avatar
test
2024-06-26

你这行签名是从 vscode 悬浮框里复制的吧?

其实它是这样的:

export declare function toRef<T>(value: T): T extends () => infer R ? Readonly<Ref<R>> : T extends Ref ? T : Ref<UnwrapRef<T>>;
export declare function toRef<T extends object, K extends keyof T>(object: T, key: K): ToRef<T[K]>;
export declare function toRef<T extends object, K extends keyof T>(object: T, key: K, defaultValue: T[K]): ToRef<Exclude<T[K], undefined>>;

你应该是写了 toRef<{}, >,那么 T 现在是 {} 了,而 K 要满足 keyof T 的约束,{} 没有键,那自然就是 never

回复
likes
适合作为回答的
  • 经过验证的有效解决办法
  • 自己的经验指引,对解决问题有帮助
  • 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
  • 询问内容细节或回复楼层
  • 与题目无关的内容
  • “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容