SimonZhangITer / vue-typescript-dpapp-demo

:fire: Let's start with TypeScript
MIT License
625 stars 146 forks source link

vue-ts环境搭建问题 #5

Open Edwardelric opened 6 years ago

Edwardelric commented 6 years ago

1、vue-cli 项目搭建完成。 2、通过vuex-class的@Getter 调用定义好的 getter方法报未定义类型

import { State, Action, Getter } from "vuex-class"; @Component export default class Main extends Vue { @Getter load: boolean; => (装饰器方式调用报错 Property 'load' has no initializer and is not definitely assigned in the constructor) mounted() { console.log(this.$store.getters.load); => (直接调用可以成功) } }

getters.ts 里面代码如下: import { GetterTree } from "vuex";

const getters: GetterTree<any, any> = { load(state): boolean { const { load } = state; return !!load; } } export default getters;

tips: 试验后发现是node_modules包不一致。使用你的vue-typescript-dpapp-demo的node_modules可以正常运行,但copy 你的package.json在本地npm install后运行就报上述错误。

DragonFlyXD commented 6 years ago

因为typescript2.7版本以后,类的属性必须初始化,否则会报错。 在tsconfig.json里添加以下记录即可:

"compilerOptions": {
    ....
    "strictPropertyInitialization": false
  }
itshizhan commented 6 years ago

或者 使用类型断言 !:,赋予空值即可! @Getter loaded!: boolean;

foolishchow commented 6 years ago

typescript 的 decorator 还不支持类型推导,在配合 vuex使用的时候无法通过vuex-class获得类型推导,你可以尝试下vue-typescript-util在不使用decorator的模式下获得vuex几乎全类型推导