Vue实践TS中的一些常见错误解决方案
mixin报错
import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator'
import httpminix from '../mixin/httpMixin'
@Component({
mixins:[httpminix]
})
export default class HelloWorld extends Vue {
public async getUser() : Promise<void> {
const r = await this.apiGet('/show') //HelloWorld上没有apiGet方法
this.firstName = JSON.stringify(r.data)
}
}
解决方案
import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator'
import httpminix from '../mixin/httpMixin'
@Component
// 这里从继承Vue改成继承Minix函数,这样就有提示了
export default class HelloWorld extends Mixins(httpminix) {
public async getUser() : Promise<void> {
const r = await this.apiGet('/show')
this.firstName = JSON.stringify(r.data)
}
public mounted() {
this.getUser()
}
}
扩展属性报错
我们现在代码里写一段window,然后用编辑器跳转到其.d.ts文件中去
// 定义一个全局变量 window 类型为Window
declare var window: Window;
// 截取Window接口
interface Window
由于这个接口为全局接口,所以我们可以声明一个同名全局全局接口,TS会帮我们合并
interface Window {
// 也可以添加
// 字符串签名 可以允许添加未知名称属性
[p: string]: any
}
// 这样就可以使用如下代码不报错
import axios from 'axios'
window.axios = axios
然后我们发现
window.axios //这里没有属性提示
然后我想把这个axios具体类型挂载上去,当然一想,像下面这样做
import {AxiosStatic} from 'axios'
interface Window {
axios: AxiosStatic
}
然后发现报错了,window上没有axios这个属性,就很疑惑,尝试改回去,仍然报错
import {AxiosStatic} from 'axios'
interface Window {
[p: string]: any
}
我就想这两个区别就是导入了一个类型,突然想到
TS中没有import和export的TS文件变量被视为全局
然后回去一看原本Window的定义
// 注意lib.dom.d.ts这里没有export
interface Window
好的,想通了,就是因为使用import导入了一个类型,导致我自定义Window接口变成了模块内的,这时候的解决方案当然是看看内置语法有没有能显示定义全局性的变量
// bingo 此时window.axios有提示啦
import { AxiosStatic } from "axios";
declare global {
interface Window {
axios: AxiosStatic
}
}
export { };
TS为我们在模块定义全局提供了一个方式,用于解决在模块中扩展全局
declare global {
// your type code
}
扩展Vue属性例子
import Vue from 'vue'
declare module "vue/types/vue" {
interface Vue {
$message: string;
}
}
在组件类中可以这样访问
this.$messgae //这里有属性提示
总结
需要扩展一个第三方声明文件,需要确定其命名空间以及扩展变量实现的接口结构,然后复制该接口写一次自己的类型即可
Vue实践TS中的一些常见错误解决方案的更多相关文章
- php源码编译常见错误解决方案大全
php源码编译常见错误解决方案大全http://www.cnlvzi.com/index.php/Index/article/id/143 在CentOS编译PHP5的时候有时会遇到以下的一些错误信息 ...
- 实用:Git 中的一些常见错误
无论是数据科学家.算法工程师还是普通开发人员,在每个团队协作开发任务中,Git 都是必不可少的版本控制工具,因此掌握它的基本操作十分有必要.但即便是教程满天飞的今天,开发人员在使用 Git 时也还是会 ...
- Ibatis中常见错误解决方案
在Ibatis 的sqlMap或者sqlMapConfig配置文件中如果出现以下错误信息: Referenced file contains errors (http://www.ibatis.com ...
- Ubuntu 搭建svn服务器 ,以及常见错误解决方案
一.安装命令: 1)以root身份登录.执行:sudo su -命令 2)执行安装命令:apt-get install subversion 二.创建项目目录 1)mkdir /home/svn ...
- Java中的一些常见错误
1.空指针错误 在java数组的使用中,有时候需要对字符串数组中的元素进行对比.那么当元素不为null时,程序会正常运行:然而,一旦对比的元素为null,那么程序就会出现空指针错误. 解决方法:加入保 ...
- php中sql语句常见错误
.php文件中sql语句的写法导致的错误如下: 1.$logSql="select * from jd_login where uname=".$u."and upwd= ...
- Latex 1: 解决latex中遇到一个常见错误:"Improper alphabetic constant."
1.问题: 本人是在WIN7下用texlive 2016,编辑器用的是WinEdt 10.1 ,运行如下代码: \documentclass{ctexbook} \begin{document} \t ...
- solr中的一些常见错误
(1)Caused by: java.lang.ClassNotFoundException: Unable to load jdbcDataSource or org.apache.solr.han ...
- [TypeScript] vs code TSLint常见错误解决方案
TSLint是一个Typescrip{过滤}t验证工具,用于检测代码. TSLint: comment must start with a space (comment-format) 注释必须从一个 ...
随机推荐
- javascript参数化拼接字符串两种方法
javascript如果直接使用字符串+的话,会被大量单引号搞晕,可以有两种比较简单的方法使用参数化拼接. 方式一,传统js //示例:StringFormat("abc{0}def&quo ...
- OCC与MVCC 的区别
一.前言 在数据库中,并发控制是指在多个用户/进程/线程同时对数据库进行操作时,如何保证事务的一致性和隔离性的,同时最大程度地并发. 当多个用户/进程/线程同时对数据库进行操作时,会出现3种冲突情形: ...
- 一个简单 System.Threading.Tasks.Dataflow.BufferBlock 示例
直接贴代码了: using System; using System.Threading.Tasks; using System.Threading.Tasks.Dataflow; namespace ...
- Python 3 的 int 类型详解(为什么 int 不存在溢出问题?)
在以前的Python2中,整型分为int和long,也就是整型和长整型, 长整型不存在溢出问题, 即可以存放任意大小的数值,理论支持无限大数字. 因此在Python3 中,统一使用长整型,用int表示 ...
- Java匹马行天下之JavaSE核心技术——注解
Java注解 一.什么是注解 注解(Annotation)相当于一种标记,在程序中加入注解就等于为程序打上某种标记,没有加,则等于没有任何标记,以后,javac编译器.开发工具和其他程序可以通过反射来 ...
- File类---Day28
概述 java.io.File 类是文件和目录路径名的抽象表示,主要用于文件和目录的创建.查找和删除等操作. 构造方法 1.public File(String pathname) :通过将给定的路径 ...
- 搜索引擎elasticsearch监控利器cat命令
目录 一.Cat通用参数 二.cat命令 三.示例 查询aurajike索引下的总文档数和有效文档数 查询aurajike各分片的调度情况 一.Cat通用参数 参数名 指令示例 功能 Verbose ...
- elementUI,设置日期,只能选择今天和今天以后的, :picker-options="pickerOptions"
1. html 加 :picker-options="pickerOptions" <el-date-picker v-model="shop.receive_ti ...
- How to prove that SAP CRM WebUI is a stateful application
I create an enhancement in this function module to print out current session id: As long as I do not ...
- SAP里SE38设置模板
经验丰富些的大佬们都会有一套自己的风格,比如report主程序里几个form,常见的fieldcat的宏定义,常见的一些数据定义等等. 1.使用事物代码SE38进入编辑器. 2.点击客户端最右下角的文 ...