2

我对打字稿很陌生。现在,我已经设置了 nuxt(bridge with typescript) 应用程序并创建了一个名为 menuIcon 的组件;

  <div class="container">


    <div class="menu-icon" :class="active ? 'change' : ''" @click="toggle">
      <div class="bar1"></div>
      <div class="bar2"></div>
      <div class="bar3"></div>
    </div>
    <div
      class="overlay"
      :class="active ? 'overlay-slide-right' : 'overlay-slide-left'"
      @click="toggle"
      id="overlay"
    >
    <!-- html contents here -->
    </div>
  </div>
</template>

<script lang="ts">


export default {
  data(){
    const active:boolean=false;
    return{
        active
    }
  },
  methods: {
    toggle():void{
       this.active= !this.active
    },
  },
};
</script>
<style scoped>
/*css contents here*/
}
</style>

它在浏览器中运行,但我在终端中看到以下错误。

TS2339: Property 'active' does not exist on type '{ toggle(): void; }'.
    41 |   methods: {
    42 |     toggle():void{
  > 43 |        this.active= !this.active
       |             ^^^^^^
    44 |     },
    45 |   },
    46 | };

ERROR in components/MenuIcon.vue:43:27
TS2339: Property 'active' does not exist on type '{ toggle(): void; }'.
    41 |   methods: {
    42 |     toggle():void{
  > 43 |        this.active= !this.active
       |                           ^^^^^^
    44 |     },
    45 |   },
    46 | };

显然这是关于打字的事情,但我不知道如何解决它。我非常感谢任何人向我阐明这些问题。提前致谢。

4

1 回答 1

1

组件定义需要使用 Vue 声明defineComponent以启用 TypeScript 支持。Nuxt Bridge 建议使用defineComponentfrom#app导入,尽管您也可以从@vue/composition-api. 最好使用#app别名,因为它包含来自@nuxtjs/composition-api.

示例

<script lang="ts">
import { defineComponent } from '#app';
                      
export default defineComponent({
  data() {
    const active:boolean = false;
    return {
      active
    }
  },
  methods: {
    toggle(): void {
      this.active = !this.active
    },
  },
});
</script>

#app别名通常设置在 中,.nuxt/tsconfig.json但我发现有必要在根应用程序中重新声明它tsconfig.json才能在 VS Code 中工作:

{
  "extends": "./.nuxt/tsconfig.json",
  "compilerOptions": {
    "paths": {
      ⋮
      "#app": [
        "node_modules/@nuxt/bridge/dist/runtime/index"
      ],
    }
  }
}

演示

于 2021-10-26T05:18:05.180 回答