vue3 Composition api 变量类型推断问题

2020-11-19 14:09:18 +08:00
 webberone
用 vue3 + ts 开发过程中,用 const root = ref(null)创建一个模板引用,编译器会提示创建出来的 root 类型是 Ref(null),但是有的项目提示类型是 Ref(any),这是什么原因呀
2205 次点击
所在节点    Vue.js
2 条回复
9ki
2020-11-19 14:46:22 +08:00
```typescript
export declare function ref<T extends object>(value: T): T extends Ref ? T : Ref<UnwrapRef<T>>;

export declare function ref<T>(value: T): Ref<UnwrapRef<T>>;

export declare function ref<T = any>(): Ref<T | undefined>;
```
上面是 vue3 ref 的类型声明
如果你在 `tsconfig.json` 开启了 `strictNullChecks ` 则 ts 会区分 null 和 undefined,否则则不区分,而是当成 any 处理
所以:如果你没有开启,那么传了 null 则会匹配到
``` export declare function ref<T extends object>(value: T): T extends Ref ? T : Ref<UnwrapRef<T>>; ```

所以最终为 any
webberone
2020-11-19 15:42:17 +08:00
@9ki 了解了,灰常感谢

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/727110

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX