mixin报错

  1. import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator'
  2. import httpminix from '../mixin/httpMixin'
  3. @Component({
  4. mixins:[httpminix]
  5. })
  6. export default class HelloWorld extends Vue {
  7. public async getUser() : Promise<void> {
  8. const r = await this.apiGet('/show') //HelloWorld上没有apiGet方法
  9. this.firstName = JSON.stringify(r.data)
  10. }
  11. }

解决方案

  1. import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator'
  2. import httpminix from '../mixin/httpMixin'
  3. @Component
  4. // 这里从继承Vue改成继承Minix函数,这样就有提示了
  5. export default class HelloWorld extends Mixins(httpminix) {
  6. public async getUser() : Promise<void> {
  7. const r = await this.apiGet('/show')
  8. this.firstName = JSON.stringify(r.data)
  9. }
  10. public mounted() {
  11. this.getUser()
  12. }
  13. }

扩展属性报错

我们现在代码里写一段window,然后用编辑器跳转到其.d.ts文件中去

  1. // 定义一个全局变量 window 类型为Window
  2. declare var window: Window;
  3. // 截取Window接口
  4. interface Window

由于这个接口为全局接口,所以我们可以声明一个同名全局全局接口,TS会帮我们合并

  1. interface Window {
  2. // 也可以添加
  3. // 字符串签名 可以允许添加未知名称属性
  4. [p: string]: any
  5. }
  6. // 这样就可以使用如下代码不报错
  7. import axios from 'axios'
  8. window.axios = axios

然后我们发现

  1. window.axios //这里没有属性提示

然后我想把这个axios具体类型挂载上去,当然一想,像下面这样做

  1. import {AxiosStatic} from 'axios'
  2. interface Window {
  3. axios: AxiosStatic
  4. }

然后发现报错了,window上没有axios这个属性,就很疑惑,尝试改回去,仍然报错

  1. import {AxiosStatic} from 'axios'
  2. interface Window {
  3. [p: string]: any
  4. }

我就想这两个区别就是导入了一个类型,突然想到

TS中没有import和export的TS文件变量被视为全局

然后回去一看原本Window的定义

  1. // 注意lib.dom.d.ts这里没有export
  2. interface Window

好的,想通了,就是因为使用import导入了一个类型,导致我自定义Window接口变成了模块内的,这时候的解决方案当然是看看内置语法有没有能显示定义全局性的变量

  1. // bingo 此时window.axios有提示啦
  2. import { AxiosStatic } from "axios";
  3. declare global {
  4. interface Window {
  5. axios: AxiosStatic
  6. }
  7. }
  8. export { };

TS为我们在模块定义全局提供了一个方式,用于解决在模块中扩展全局

  1. declare global {
  2. // your type code
  3. }

扩展Vue属性例子

  1. import Vue from 'vue'
  2. declare module "vue/types/vue" {
  3. interface Vue {
  4. $message: string;
  5. }
  6. }
  7. 在组件类中可以这样访问
  8. this.$messgae //这里有属性提示

总结

需要扩展一个第三方声明文件,需要确定其命名空间以及扩展变量实现的接口结构,然后复制该接口写一次自己的类型即可

Vue实践TS中的一些常见错误解决方案的更多相关文章

  1. php源码编译常见错误解决方案大全

    php源码编译常见错误解决方案大全http://www.cnlvzi.com/index.php/Index/article/id/143 在CentOS编译PHP5的时候有时会遇到以下的一些错误信息 ...

  2. 实用:Git 中的一些常见错误

    无论是数据科学家.算法工程师还是普通开发人员,在每个团队协作开发任务中,Git 都是必不可少的版本控制工具,因此掌握它的基本操作十分有必要.但即便是教程满天飞的今天,开发人员在使用 Git 时也还是会 ...

  3. Ibatis中常见错误解决方案

    在Ibatis 的sqlMap或者sqlMapConfig配置文件中如果出现以下错误信息: Referenced file contains errors (http://www.ibatis.com ...

  4. Ubuntu 搭建svn服务器 ,以及常见错误解决方案

    一.安装命令: 1)以root身份登录.执行:sudo su -命令 2)执行安装命令:apt-get install subversion   二.创建项目目录 1)mkdir  /home/svn ...

  5. Java中的一些常见错误

    1.空指针错误 在java数组的使用中,有时候需要对字符串数组中的元素进行对比.那么当元素不为null时,程序会正常运行:然而,一旦对比的元素为null,那么程序就会出现空指针错误. 解决方法:加入保 ...

  6. php中sql语句常见错误

    .php文件中sql语句的写法导致的错误如下: 1.$logSql="select * from jd_login where uname=".$u."and upwd= ...

  7. Latex 1: 解决latex中遇到一个常见错误:"Improper alphabetic constant."

    1.问题: 本人是在WIN7下用texlive 2016,编辑器用的是WinEdt 10.1 ,运行如下代码: \documentclass{ctexbook} \begin{document} \t ...

  8. solr中的一些常见错误

    (1)Caused by: java.lang.ClassNotFoundException: Unable to load jdbcDataSource or org.apache.solr.han ...

  9. [TypeScript] vs code TSLint常见错误解决方案

    TSLint是一个Typescrip{过滤}t验证工具,用于检测代码. TSLint: comment must start with a space (comment-format) 注释必须从一个 ...

随机推荐

  1. 【MySQL】Mariadb字符集

    Mariadb字符集 如果不设置字符集,可以查看mariadb的字符集的默认设置是latin1. 如下命令,查看Mariadb的默认配置: [root@oradb ~]# /usr/local/mys ...

  2. 【04】Jenkins:基本功能补充说明

    写在前面的话 在 Jenkins 中有那么一些功能,可能你几乎不会怎么用到,但是某些时候又能够帮助你解决一些很麻烦的事情.我这里单独的把这些小配置抽离出来作为一个单独章节.很多配置不需要记得,但是要知 ...

  3. U9 DLL读取配制文件

    在网上大多数的例子都是如何访问程序运行的目录下的配制文件,但是U9BP里要将DLL放到生产环境,我并不知道生产环境运行的目录,所以只能DLL读取当前目录XML. 过下面几个方法都可以拿到程序所在的文件 ...

  4. web dom api中的Selection和Range

    如果你做过wysiwyg这样的app,一个很让人头疼的问题是如何保证执行bold,italic等格式化操作后保持先前鼠标所在的位置.要好好的解决这个问题,就必须将Selection和Range的api ...

  5. C++中的Point类与vector类的简单处理

    首先设计Vector与Point的表示方法,再依次完善两个类中的构造函数,复制构造函数等. 向量由两个点表示,当进行运算的时候,转化起点坐标为(0,0): 第14行:由于Vector需要用到Point ...

  6. 使用Docker Compose 部署Nexus后提示:Unable to create directory /nexus-data/instance

    场景 Ubuntu Server 上使用Docker Compose 部署Nexus(图文教程): https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/ ...

  7. Java代码中可以优化性能的小细节

    避免对boolean类型的判定 反例: 12 if("a".equles("a")==true)`{} 正例: 12 if(Objects.equles(&qu ...

  8. 实验吧——加了料的报错注入(exp报错注入)

    题目地址:http://ctf5.shiyanbar.com/web/baocuo/index.php 先查看页面源码得到提示知道了后台执行的sql语句,很常规的查询 测试了一个报错函数发现如下回显, ...

  9. 利用shell脚本将Oracle服务器中数据定时增量刷新到ftp服务器中

    现有需求:将oracle数据库中的数据准实时同步至某ftp服务器中,以便前端应用能定时从ftp服务器目录中取增量数据 方法:将加工脚本写为存储过程,然后利用shell脚本执行该存储过程并将增量数据导出 ...

  10. Python与设计模式之单例模式

    一.什么是单例 即单个实例,指的是同一个类实例化多次的结果指向同一个对象,用于节省内存空间 如果我们从配置文件中读取配置来进行实例化,在配置相同的情况下,就没必要重复产生对象浪费内存了 # setti ...