TypeScript基础2
生成tsconfig.json 文件
这个文件是通过tsc --init
命令生成的
配置详解
1 | "compilerOptions": { |
namespace命名空间
我们在工作中无法避免全局变量造成的污染,TypeScript提供了namespace 避免这个问题出现。
- 内部模块,主要用于组织代码,避免命名冲突。
- 命名空间内的类默认私有
- 通过
export
暴露 - 通过
namespace
关键字定义
TypeScript与ECMAScript 2015一样,任何包含顶级import
或者export
的文件都被当成一个模块。相反地,如果一个文件不带有顶级的import
或者export
声明,那么它的内容被视为全局可见的(因此对模块也是可见的)
命名空间(namespace)中通过export
将想要暴露的部分导出
如果不用export 导出是无法读取其值的
1 | namespace A { |
嵌套命名空间
1 | namespace A { |
抽离命名空间
a.ts
1 | export namespace A { |
b.ts
1 | import {A} from '../observer/index' |
简化命名空间
1 | namespace A { |
合并命名空间
- 重名的命名空间会合并
三斜线指令
- 三斜线指令是包含单个XML标签的单行注释。 注释的内容会做为编译器指令使用。
/// <reference path="..." />
指令是三斜线指令中最常见的一种。 它用于声明文件间的 依赖。- 类似import,它可以告诉编译器在编译过程中要引入的额外的文件
- 三斜线指令仅可放在包含它的文件的最顶端。 一个三斜线指令的前面只能出现单行或多行注释,这包括其它的三斜线指令
Mixins混入
TypeScript混入 Mixins 其实vue也有mixins这个东西 你可以把他看作为合并。
对象混入
可以使用es6的Object.assign 合并多个对象。
1 | interface Name { |
类的混入
首先声明两个mixins类 (严格模式要关闭不然编译不过)
1 | class A { |
下面创建一个类,结合了这两个mixins
首先应该注意到的是,没使用extends
而是使用implements
。 把类当成了接口
我们可以这么做来达到目的,为将要mixin进来的属性方法创建出占位属性。 这告诉编译器这些成员在运行时是可用的。 这样就能使用mixin带来的便利,虽说需要提前定义一些占位属性
1 | class C implements A,B{ |
最后,创建这个帮助函数,帮我们做混入操作。 它会遍历mixins上的所有属性,并复制到目标上去,把之前的占位属性替换成真正的实现代码。
Object.getOwnPropertyNames()可以获取对象自身的属性,除去他继承来的属性,对它所有的属性遍历,它是一个数组,遍历一下它所有的属性名
1 | Mixins(C, [A, B]) |
装饰器Decorator
什么是装饰器
- 装饰器是一种特殊类型的声明,它能够被附加到类声明,方法, 访问符,属性或参数上。
- 它类似于Java中的那个注解,它会在运行时被调用,被装饰的声明信息做为参数传入。
使用方式
首先在在 tsconfig.json
中开启 experimentalDecorators
编译器选项
1 | { |
装饰器可以应用在如下几处地方
- Class
- 函数
- 函数参数
- 属性
- get set 访问器
案例:
1 | let decorator : ClassDecorator = (target : Function) =>{ |
1 | let decorator : ClassDecorator = (target : Function) =>{ |
装饰器高阶使用:
1 | // 装饰器传入一个string参数 |
评论