我目前的目标是尝试从Typescript和Vue中获得最大的收益,但是我遇到了无法摆脱any
错误的问题。
我目前被迫进入一个无法更改的非常奇怪的环境配置,这是因为我无法使用vue-cli,webpack,node或几乎任何其他可以改善我的生活的东西。
话虽如此,我所能做的就是包括这样的vue:<script src="https://cdn.jsdelivr.net/npm/vue@2.6.0"></script>
所以回到我的问题,我现在能够使用字符串模板和模板化文字来创建vue组件,如果我想使用x-templates。如果我只想使用javascript,这一切都很好,但是我被指示要使用Typescript,所以我会用它,但这是事情有些偏颇的地方。
例如,我具有以下组件:
const testComponentTemplate = `<div><h1>here be dragons</h1>
<p>counter: {{count}}</p>
<button @click="increment">increment</button> - <button @click="decrement">derement</button>
</div>`
const testComponent = Vue.component("test-component", {
template: testComponentTemplate,
data() {
return {
count: 0
}
},
methods: {
increment(): void {
const model = this;
model.count = model.count + 1;
},
decrement(): void {
const model = this;
model.count = model.count - 1;
}
}
});
当然,这里没有很多特定于打字稿的事情,而我遇到的问题是数据功能/对象。无论我做什么,都永远不会键入数据,并且总是返回any
。在上述情况下,我希望计数为number
,但对于我一生来说,我似乎找不到任何能让我做到这一点的东西。最初,我的第一个假设是自己输入:
data(): { count: number} {
count: 0
}
但是在方法模型内部仍然是任何类型,如果我在tsconfig.json中打开了noImplicitAny或noImplicit,则打字稿编译器会开始给我一些不错的错误
我注意到的一件事是,当我在methods
,computed
或watch
内打开noImplicitThis时,我看到它们各自块中的函数都被键入了,但是从data
出现。