使用 typescript,渲染时提示未知的自定义组件
发布于 3 年前 作者 huaer 2019 次浏览 来自 问答
粉丝福利 : 关注VUE中文社区公众号,回复视频领取粉丝福利

目前的做法是这样的:
首先在 src 目录下写个 modules.d.ts 文件定义 vue 模块:

// modules.d.ts
declare module "*.vue" {
    import Vue from "vue";
    export default Vue;
}

然后打算在 components 文件夹下写一个 index.ts 来导入所有的组件,方便其他地方导入:

// components/index.ts
import App from './app/app.vue';
import Pager from './pager/pager.vue';

export { App, Pager };

最后在用到子组件的组件中用 vue-class-component@Component 来注册子组件:

// components/app/app.ts
import { Pager } from '@/components';
@Component({
    components: {
        'pager': Pager
    }
})
export default class App extends Vue {

}

但是渲染的时候子组件并没有被渲染出来,控制台报错:

[Vue warn]: Unknown custom element: <pager> \- did you register the component correctly? For recursive components, make sure to provide the "name" option.

这里如果我直接导入 vue 文件的话又能够正确渲染:

// components/app/app.ts
//import { Pager } from '@/components';
import Pager from '@/components/pager/pager.vue';
@Component({
    components: {
        'pager': Pager
    }
})
export default class App extends Vue {

}

请问这种做法有错误吗,正确的做法应该是怎样的?

目录结构:

.
`-- src
    |-- components
    |   |-- app
    |   |   |-- app.css
    |   |   |-- app.ts
    |   |   `-- app.vue
    |   |-- index.ts
    |   `-- pager
    |       |-- pager.css
    |       |-- pager.ts
    |       `-- pager.vue
    `-- modules.d.ts
回到顶部