Vue + typescript - TypeError:对象原型只能是对象或为 null:未定义
2018-02-26
7145
TypeError:对象原型可能只是一个对象或 null:未定义
我的项目中出现了一些错误。 我正在使用 vuejs、typescript 和 jest。
这只是简单的代码,我尝试使用 jest 进行单元测试,但它有一些错误。这是我的测试代码。
///<reference path="../../../../node_modules/@types/jest/index.d.ts"/>
// https://vue-test-utils.vuejs.org/kr/s
import { mount } from "vue-test-utils";
import HelloWorld from './HelloWorld.vue';
describe('[HelloWorld]', function () {
let cmp: any;
beforeEach(() => {
cmp = mount(HelloWorld);
});
it("Check vue instance", () => {
expect(cmp.isVueInstance()).toBeTruthy();
});
it("message is Hello", () => {
expect(cmp.vm.msg).toEqual('Hello!!');
});
});
这是 vue 文件
<template>
<div class="hello">
<h1>{{ msg }}</h1>
<img src="/assets/logo.png">
<button @click="clickHandler">
button
</button>
</div>
</template>
<script lang="ts">
import Vue from "vue";
import Component from "vue-class-component";
interface HelloWorldInterface {
msg: string;
clickHandler(): void;
}
@Component({})
export default class HelloWorld extends Vue implements HelloWorldInterface {
msg = "Hello!!";
clickHandler() {
window.alert(this.msg);
}
}
</script>
3个回答
您应该为您的
tsconfig.json
或您自己的
tsconfig
设置
esModuleInterop = true
,仅适用于
jest
Hoang Vu
2018-07-20
问题似乎在于 Vue2 如何暴露自身,因此
import Vue from "vue"
会导致此错误。
我通过使用 'vue-property-decorator' 修复了此问题,如下所示:
import { Vue, Component, Prop } from 'vue-property-decorator';
那么 'vue-property-decorator' 有什么作用?它导入然后导出 Vue,不是默认的,而是名为 export。我想如果您愿意,您可以在自己的代码中执行此操作。
import Vue, { PropOptions, WatchOptions } from 'vue';
...
export { Component, Vue, mixins as Mixins };
Reynicke
2020-04-09
对我来说,使用
import * as Vue from "vue"
而不是
import Vue from "vue"
解决了我的项目中类似的设置问题,即:
//import Vue from "vue";
import * as Vue from "vue";
import Component from "vue-class-component";
interface HelloWorldInterface {
msg: string;
clickHandler(): void;
}
@Component
export default class HelloWorld extends Vue implements HelloWorldInterface {
msg = "Hello!!";
clickHandler() {
window.alert(this.msg);
}
}
这要麻烦得多,但至少有效。我已经使用 vue-cli 设置了一个概念验证示例: https://codesandbox.io/s/mjvjw2xw39
Terry
2018-04-05