gpt4 book ai didi

typescript - 带有 typescript 的 Vue2,类型上不存在属性

转载 作者:行者123 更新时间:2023-12-04 11:29:09 27 4
gpt4 key购买 nike

我有以下 Vue 组件:

<template>
<v-snackbar bottom :color="color" v-model="snackbar">
{{ msg }}
<v-btn flat @click.native="close()">Close</v-btn>
</v-snackbar>
</template>

<script lang="ts">
import Vue from 'vue';
import VueEvent from '../../VueEvent';

export default Vue.extend({
data(): object {
return {
snackbar: false,
msg: '',
color: '',
};
},
created() {
VueEvent.listen('snackbar', (data) => {
this.snackbar = true;
this.msg = data.msg;
this.color = data.color;
});
this.malert();
},
methods: {
close(): void {
this.snackbar = false;
}
}
});
</script>

<style scoped>

</style>

当 Typescript 编译时,我收到以下错误:
Property 'snackbar' does not exist on type 'CombinedVueInstance<Vue, object, { close(): void; }, {}, Readonly<Record<never, any>>>'.
28 | methods: {
29 | close(): void {
> 30 | this.snackbar = false;
| ^
31 | }
32 | }
33 | });

有谁知道我如何解决这个问题,或者解释为什么会发生?

最佳答案

好吧,我没有很好的答案给你,但我有理论:

原始类型声明位于 vue/types/options.d.ts 中:

type DefaultData<V> =  object | ((this: V) => object); // here is the kicker
Data=DefaultData<V>
data?: Data;

我发现:
data():object { ... // this.snackbar does not exist
data(){ ... // this.snackbar does exist.
data(): any { ... // this.snackbar does exist.
data(): { snackbar: boolean; msg: string; color: string } { ... // Also valid

我认为没有你的对象声明 typescript 会认为 dataDefaultData<V> = object .但是一旦你说它返回一个对象,数据就会突然匹配 ((this: V) => object)反而。现在 typescript 需要 this类型为 V (我假设它是一个 vue 实例)并且由于该 vue 实例在它的定义中没有 snackbar ,因此,boom, typescript 抛出。

这里有很多猜测,但我认为除了明确返回 object 之外,几乎任何事情都没有。将不匹配 DefaultData<V> 中的第二个签名.

关于typescript - 带有 typescript 的 Vue2,类型上不存在属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50810291/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com