vue这段代码不是百分之百懂,可以讲的细点吗?
declare module '*.vue' {
import { defineComponent } from 'vue'
const Component: ReturnType<typeof defineComponent>
export default Component
}
问题 1 扩展模块的时候 * 是代表所有,那么可以理解正则的写法都支持吗? 2 泛型里面这种写法感觉好奇怪 typeof defineComponent> 3.ReturnType 为啥没有导入的部分呢?从哪里来
回复
1个回答
test
2024-07-10
*.vue
不是一个正则写法,就是普通的通配符。它代表了所有以 .vue
结尾的模块。在 TypeScript 中我们通过 import .... from "xxxxxx"
来从模块引入东西,这里 xxxxxx
可能是 ./something.vue
,或者 @/comp/xyz.vue
…… 那都匹配 *.vue
。
defineComponent
是一个函数。在 TypeScript 中由于引入了类型,它会区分“类型”和“值”,类型在转成 JS 之后是会被擦除的东西,而值仍然存在。defineComponent
显然是一个值。但是 TS 的泛型运算(注意 TS 的泛型不是简单的泛型参数那么简单,TS 可以通过基于泛型的类型定义来实现泛型运算)只能使用类型,所以要通过 typeof defineComponent
把这个值的类型找出来。当然,如果你能直接找到 defineComponent
的类型定义,从 "vue"
中引入也可以(可以通过 import type
)
ReturnType
是 TS 预定义的类型工具(可以认为是类型运算函数),所以不需要引入。还有很多其他的,可以去看:TypeScript: Documentation - Utility Types (typescriptlang.org)
回复
适合作为回答的
- 经过验证的有效解决办法
- 自己的经验指引,对解决问题有帮助
- 遵循 Markdown 语法排版,代码语义正确
不该作为回答的
- 询问内容细节或回复楼层
- 与题目无关的内容
- “赞”“顶”“同问”“看手册”“解决了没”等毫无意义的内容