gpt4 book ai didi

typescript - 关于 Vue 3 + TypeScript 和 Augmenting-Types-for-Use-with-Plugins 的问题

转载 作者:行者123 更新时间:2023-12-03 21:46:00 26 4
gpt4 key购买 nike

有谁知道应该如何使用 Vue3 和 TypeScript 实现类型增强的工作示例?我一直在尝试遵循 Vue2 文档,在 Vue3 中使用相同的文档但没有成功,并且在过去 3 个小时的搜索中没有任何结果。
似乎 Vue vue-class-component 中的对象模块应该被扩充以工作,但是如何?
我的实现类似于以下内容:
有什么建议吗?
https://vuejs.org/v2/guide/typescript.html#Augmenting-Types-for-Use-with-Plugins

import { App, Plugin } from "vue";

export interface IHelloModule {
sayHello: (name: string) => string;
}

export const helloPlugin: Plugin = (app: App, options) => {

const helloModule:IHelloModule = {

sayHello: function(name: string) {
return `Hello ${name}`;
}

};

app.provide("$hello", helloModule);
};
import { Vue } from 'vue-class-component';
import { IHelloModule } from "@/hello";

declare module "vue/types/vue" {
interface Vue {
$hello: IHelloModule;
}
}

declare module "vue/types/vue" {
interface VueConstructor {
$auth: IHelloModule;
}
}
<template>
<div class="home">
.....
</div>
</template>

<script lang="ts">
import { Options, Vue } from 'vue-class-component';

@Options({
components: {
},
})
export default class Home extends Vue {
mounted() {
console.log(this.$hello.sayHello("World"))
^^^^^^^^^^^^^^^^^^^^^^^^^^
Neither TS nor vue-cli recognize this
}
}
</script>
import { createApp } from "vue";
import App from "./App.vue";
import { helloPlugin } from "./hello";
import router from "./router";

createApp(App)
.use(router, helloPlugin)
.mount("#app");

最佳答案

据我了解,vue-class-component还不完全支持 Vue 3。他们仍然是discussing库中的修改。所以,我不知道下面的示例是否适用于它,但这是我为增加插件类型所做的。
你好.plugin.ts

import { App } from "vue";

export interface IHelloModule {
sayHello: (name: string) => string;
}

export default {
install: (app: App) => {
const helloModule: IHelloModule = {
sayHello: function(name: string) {
return `Hello ${name}`;
}
};

app.config.globalProperties.$hello = helloModule;
}
}

declare module "@vue/runtime-core" {
//Bind to `this` keyword
interface ComponentCustomProperties {
$hello: IHelloModule;
}
}
我在插件文件本身中声明了类型,但您可以在 shims-vue.d.ts 中声明它们文件也。
main.ts
import { createApp } from "vue";
import App from "./App.vue";
import router from "./router";
import Hello from "./hello.plugin";

createApp(App)
.use(router)
.use(Hello)
.mount("#app");
你好.vue
<script lang="ts">
import { defineComponent } from "vue";

const Hello = defineComponent({
mounted() {
console.log(this.$hello.sayHello("World"));
}
});

export default Hello;
</script>

关于typescript - 关于 Vue 3 + TypeScript 和 Augmenting-Types-for-Use-with-Plugins 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64118679/

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