gpt4 book ai didi

typescript - 在 typescript 中增强 vue.js

转载 作者:搜寻专家 更新时间:2023-10-30 21:06:29 25 4
gpt4 key购买 nike

我正在尝试使用额外的映射来增强 vue js。我正在关注:https://v2.vuejs.org/v2/guide/typescript.html#Augmenting-Types-for-Use-with-Plugins

我在./Definitions下创建了一个文件vue.d.ts(相对于我的main.ts)我在我的 main.ts 中引用了它:

require("./Definitions/vue.d.ts");

vue.d.ts 我放了:

 // 1. Make sure to import 'vue' before declaring augmented types
import Vue from 'vue'

// 2. Specify a file with the types you want to augment
// Vue has the constructor type in types/vue.d.ts
declare module 'vue/types/vue' {
// 3. Declare augmentation for Vue
interface Vue {
$myProperty: string
}
}

但是这个:

var vm = new Vue()
console.log(vm.$myProperty);

没有解决。

我尝试将 declare module 'vue/types/vue' 更改为仅 declare module 'vue'。这给了我一个错误:"Cannot augument module 'vue' because it resolves to a non-module entity"

原始的 vue 类型位于 {projectDir}\node_modules\@types\vue\index.d.ts 下。我正在使用 webpack。

我该如何正确地做到这一点?

最佳答案

假设您的项目有tsconfig.json,您应该设置以下compilerOptions:

{
"compilerOptions": {

"baseUrl": ".",

// other options go here

"typeRoots": [
"./node_modules/@types",
"./typings"
]
}
}

完成后,创建相对于 tsconfig.json 和您提到的路径的 typings/vue 文件夹。在 typings/vue 文件夹中,创建 index.d.ts 文件。通常,您的声明文件如下所示:

import Vue from 'vue';
import { AppStore } from '../../src/store/store';

declare module 'vue/types/vue' {
// Global properties can be declared
// on the `VueConstructor` interface
interface VueConstructor {
// some more augmentation
}

// Properties added to Vue interface are added to Vue instance
interface Vue {
store$: AppStore;
}
}

与您尝试使用的方法相比,更喜欢这种方法,因为导入类型文件的扩展性不是很好。

此外,使用最新的 Vue.js,您不需要 node_modules/@types/vue 声明。它们作为官方 node_modules/vue 包的一部分提供。如果您这样做,那么您应该删除它们。

关于typescript - 在 typescript 中增强 vue.js,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50909703/

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