Я работаю над проектом, используя vue-js и TypeScript. Поэтому я даю vue-class-component
попытку.
Я пытаюсь закодировать миксин, он хорошо работает в VSC и VS, но кажется, что WebStorm не очень доволен моим кодом.
Вот миксин:
import Vue from 'vue'
import {StoreOptions} from 'vuex'
import Component from "vue-class-component";
@Component
export default class Container extends Vue {
registerStoreModule(key: string, module: StoreOptions<any>): void {
if (!this.$store.state[key]) {
this.$store.registerModule(key, module);
}
}
}
А вот компонент, использующий этот миксин:
@Component({
components: { UserCard },
computed: mapGetters({ user: `${STORE_KEY}/user` })
})
export default class UserContainer extends mixins(Container) {
user: UserState;
created() {
this.registerStoreModule(STORE_KEY, store)
}
mounted() {
this.$store.dispatch(`${STORE_KEY}/getUser`);
}
}
Согласно vue-class-component , это должно работать. Дело в том, что WebStorm не может проверить типы TypeScript.
Есть 2 ошибки:
- Типы аргументов не соответствуют параметрам
- Все базовые конструкторы должны иметь одинаковый тип возврата
Код хорошо компилируется, и другие IDE не распознают эти ошибки. Я пробовал с разными версиями TS, в настоящее время я использую 2.8.3. Visual Studio Code использует ту же версию, что и WebStorm.
РЕДАКТИРОВАТЬ: Вот мой tsconfig.json, это может быть полезно:)
{
"compilerOptions": {
"target": "esnext",
"module": "esnext",
"strict": true,
"jsx": "preserve",
"moduleResolution": "node",
"allowSyntheticDefaultImports": true,
"experimentalDecorators": true,
"sourceMap": true,
"baseUrl": ".",
"types": [
"node",
"mocha",
"chai"
],
"paths": {
"@/*": [
"src/*"
]
}
},
"include": [
"src/**/*.ts",
"src/**/*.vue",
"tests/**/*.ts"
],
"exclude": [
"node_modules"
]
}