vue这段代码不是百分之百懂,可以讲的细点吗?

declare module '*.vue' {
    import { defineComponent } from 'vue'
    const Component: ReturnType<typeof defineComponent>
    export default Component
}

问题
1 扩展模块的时候 * 是代表所有,那么可以理解正则的写法都支持吗?
2 泛型里面这种写法感觉好奇怪 typeof defineComponent>
3.ReturnType 为啥没有导入的部分呢?从哪里来

阅读 1.5k
2 个回答

*.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)

这段代码声明了一个用于在TypeScript或vue.js项目中导入.vue文件的模块。声明模块语法用于指定可以将任何.vue文件作为模块导入到项目中。

在模块声明中,import语句用于从Vue.js库导入defineComponent函数。defineComponent函数用于定义新的Vue.js组件。

const Component声明将defineComponent函数的返回类型分配给名为Component的常量变量。ReturnType类型是一种内置的TypeScript实用程序类型,它提取函数的返回类型。

最后,export default Component语句将Component常量导出为模块的默认导出,因此可以使用import语句将其导入项目的其他部分。这允许在.Vue文件中定义的Vue.js组件在TypeScript或Vue.js项目中使用和导入。

logo
Microsoft
子站问答
访问
宣传栏