typescript - 使用带有 typescript 的 vue 渲染时得到 “Unknown custom element”

标签 typescript vue.js

目前的做法是这样的: 首先在'src'文件夹下放一个'modules.d.ts'文件来定义vue模块:

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

然后写一个index.ts我的components下的文件用于导入所有组件并在任何地方使用它们的文件夹:

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

export { App, Pager };

最后用@Component注册子组件来自 vue-class-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

最佳答案

只需更改组件的注册方式即可。 改变

@Component({
    components: {
        'pager': Pager
    }
})

进入

@Component({
    components: {
        'pager': () => Promise.resolve(Pager)
    }
})

关于typescript - 使用带有 typescript 的 vue 渲染时得到 “Unknown custom element”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48049034/

相关文章:

TypeScript:返回与参数相同的类型

javascript - 在委托(delegate)给其他纯函数的联合类型上测试纯函数

javascript - 从 JavaScript 访问 TypeScript 函数

reactjs - 尝试从 aws-appsync lib 修复 "Could not find a declaration file for module"会导致另一个错误

javascript - 如何在 Vue js 中使用其名称获取 View 或组件对象?

javascript - 如何在 vis.js 时间轴中对嵌套组进行排序?

javascript - 从子项访问父项的 $refs - Vue.js

javascript - vue.js 中的 v-bind 错误

javascript - vuelidate 中可选的嵌套验证

javascript - HTML 中的代码完成/自动完成 Angular/typescript ATOM