基于字符串的强类型打字稿组件

时间:2019-11-04 22:54:48

标签: typescript vue.js vuejs2 vue-component

我目前的目标是尝试从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,则打字稿编译器会开始给我一些不错的错误

我注意到的一件事是,当我在methodscomputedwatch内打开noImplicitThis时,我看到它们各自块中的函数都被键入了,但是从data出现。

0 个答案:

没有答案