聊聊typescript中的生冷知识

缘起


最近有童鞋和我反馈,typescript大致能学会,但是有一部分生冷的知识理解不透彻,我按照童鞋的反馈,大致的写个文章。

namespace和declare


这个其实蛮好区分的,namespace代表命名空间,可以对接口,类等进行分类管理,相当于一个集合的代表,通过< reference path=‘xxx.ts’/>引入。declare代表全局,有了这个声明,不再需要引入,可以直接使用,declare namespace就是全局命名空间。

declare主要用于.d.ts文件,也可以用于declare global 修改全局,最主要的作用是把声明的内容写入编译器,防止编译器报错(declare就是告诉TS编译器你担保这些变量和模块存在,并声明了相应类型,编译的时候不需要提示错误)。

reference


这个主要使用///引入,表示把某个文件引入,/// < reference path="…" />和/// < reference types="…" />都可以,它们分别是按照路径引入,按照某个包引入,其中/// < reference types="…" />只可使用在d.ts文件中,必须放在文件最顶端,三斜线指令的前面只允许出现单行或多行注释

export as namespace


这个主要是umd模块使用,兼容用的,其实不需要去深入探究。

type,interface,abstract


先来说type,type 可以声明基本类型别名,联合类型,元组(可以看成是固定长度的数组)等类型。interface,abstract相比于type,最大的区别是能够声明合并,能被继承。

使用场景上来说,能用interface或者abstract,就不要用type,方便扩展。

再来说说interface和abstract区别,interface是不允许有实体方法的,只能声明, abstract是可以有实体方法的,何为实体方法,大家看看下面就明白了

// 非实体方法
a(): void
// 实体方法
a(): void {
	console.log(1)
}

说白了就是有没有{},有没有可以运行的内容

dom事件


具体大家可以看typescript/lib/lib.dom.d.ts ,react是基于这个,自己实现了一套声明,讲几个主要的就行,大家写代码的时候,用提示器,分分钟解决问题。

  • HTMLElement, 单个dom
  • HTMLCollection,dom集合(document.getElementsByClassName,我们可以用as HTMLElement强行定义,也可以用dom: HTMLCollection = document.getElementsByClassName)
  • MouseEvent,这个不用说了吧,鼠标事件
  • KeyboardEvent,这个也一样,键盘事件

想要了解更多,可以去上面的文件看看定义,反正也就那样。

总结


ts中有很多互相替代的方法,使用也只是习惯问题,就像interface和abstract,其实用谁都可以,正所谓条条大路通罗马,能达到目的,过程并不重要!

尾声


美好的时光总是短暂的,一分耕耘,一份收获,今天大家是不是又进步了呢!

你可能感兴趣的:(typescript)