VueJS + Typescript:属性 类型不存在
VueJS + Typescript: Property does not exist on type
我使用 vue-cli 3 创建了一个简单的 Vue 应用程序并使用 TypeScript 配置。我还安装了 axios 并尝试在 mounted()
中使用它以加载数据并将其显示在组件中。
代码如下:
<script lang='ts'>
import { Component, Prop, Vue } from 'vue-property-decorator';
import SearchBar from '@/components/prods_comp/SearchBar.vue';
import ProdsTable from '@/components/prods_comp/ProdsTable.vue';
@Component({
components: {
SearchBar,
ProdsTable,
},
})
export default class MainProds extends Vue {
@Prop({ default: 'Produits' }) private message!: string;
mounted() {
const baseURI = 'http://localhost:8069';
this.$http({
method: 'POST',
url: baseURI + '/vue_web_services/msg/',
headers: { 'content-type': 'application/json',},
data: {
}
}).then(function (response) {
console.log(response.data);
});
}
}
</script>
这是一个相当基本的 API 调用。有用。问题是控制台中不断弹出此消息:
ERROR in D:/ODOO/Vue/bons_commande/src/components/prods_comp/MainProds.vue
26:10 Property '$http' does not exist on type 'MainProds'.
24 | mounted() {
25 | const baseURI = 'http://localhost:8069';
> 26 | this.$http({
| ^
27 | method: 'POST',
28 | url: baseURI + '/vue_web_services/msg/',
29 | crossdomain: true,
编辑:这里是 main.ts:
import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
import VueSweetalert2 from 'vue-sweetalert2';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import '@/assets/scss/tailwind.scss';
import axios from 'axios';
Vue.config.productionTip = false;
Vue.prototype.$http = axios;
Vue.use(ElementUI);
Vue.use(VueSweetalert2);
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app');
制作如下插件文件并在main.ts
中使用该插件
有关详细文档 --
https://vuejs.org/v2/guide/typescript.html#Augmenting-Types-for-Use-with-Plugins
import _Vue from 'vue';
import Axios from 'axios';
export function AxiosPlugin<AxiosPlugOptions>(Vue: typeof _Vue, options?: AxiosPluginOptions): void {
// do stuff with options
Vue.prototype.$http = Axios;
}
export class AxiosPluginOptions { // add stuff }
import { AxiosStatic } from 'axios';
declare module 'vue/types/vue' {
interface Vue {
$http: AxiosStatic;
}
}
看起来您可能缺少 vue-axios
,它将 $http
添加到 Vue 原型,允许 this.$http()
从单个文件组件调用。
解决问题:
从命令行安装vue-axios
:
npm i -S vue-axios
在main.ts
中添加如下代码:
import Vue from 'vue'
import axios from 'axios'
import VueAxios from 'vue-axios'
Vue.use(VueAxios, axios)
我使用 vue-cli 3 创建了一个简单的 Vue 应用程序并使用 TypeScript 配置。我还安装了 axios 并尝试在 mounted()
中使用它以加载数据并将其显示在组件中。
代码如下:
<script lang='ts'>
import { Component, Prop, Vue } from 'vue-property-decorator';
import SearchBar from '@/components/prods_comp/SearchBar.vue';
import ProdsTable from '@/components/prods_comp/ProdsTable.vue';
@Component({
components: {
SearchBar,
ProdsTable,
},
})
export default class MainProds extends Vue {
@Prop({ default: 'Produits' }) private message!: string;
mounted() {
const baseURI = 'http://localhost:8069';
this.$http({
method: 'POST',
url: baseURI + '/vue_web_services/msg/',
headers: { 'content-type': 'application/json',},
data: {
}
}).then(function (response) {
console.log(response.data);
});
}
}
</script>
这是一个相当基本的 API 调用。有用。问题是控制台中不断弹出此消息:
ERROR in D:/ODOO/Vue/bons_commande/src/components/prods_comp/MainProds.vue
26:10 Property '$http' does not exist on type 'MainProds'.
24 | mounted() {
25 | const baseURI = 'http://localhost:8069';
> 26 | this.$http({
| ^
27 | method: 'POST',
28 | url: baseURI + '/vue_web_services/msg/',
29 | crossdomain: true,
编辑:这里是 main.ts:
import Vue from 'vue';
import App from './App.vue';
import router from './router';
import store from './store';
import VueSweetalert2 from 'vue-sweetalert2';
import ElementUI from 'element-ui';
import 'element-ui/lib/theme-chalk/index.css';
import '@/assets/scss/tailwind.scss';
import axios from 'axios';
Vue.config.productionTip = false;
Vue.prototype.$http = axios;
Vue.use(ElementUI);
Vue.use(VueSweetalert2);
new Vue({
router,
store,
render: h => h(App)
}).$mount('#app');
制作如下插件文件并在main.ts
中使用该插件有关详细文档 -- https://vuejs.org/v2/guide/typescript.html#Augmenting-Types-for-Use-with-Plugins
import _Vue from 'vue';
import Axios from 'axios';
export function AxiosPlugin<AxiosPlugOptions>(Vue: typeof _Vue, options?: AxiosPluginOptions): void {
// do stuff with options
Vue.prototype.$http = Axios;
}
export class AxiosPluginOptions { // add stuff }
import { AxiosStatic } from 'axios';
declare module 'vue/types/vue' {
interface Vue {
$http: AxiosStatic;
}
}
看起来您可能缺少 vue-axios
,它将 $http
添加到 Vue 原型,允许 this.$http()
从单个文件组件调用。
解决问题:
从命令行安装
vue-axios
:npm i -S vue-axios
在
main.ts
中添加如下代码:import Vue from 'vue' import axios from 'axios' import VueAxios from 'vue-axios' Vue.use(VueAxios, axios)