TypeScript
一、TS类型
-
any:任何类型,可以赋值给任意变量 不建议使用
-
unknown:表示未知类型的值
unknown 类型的变量,不能直接赋值给其它变量
-
类型断言:可以用来告诉解析器变量的实际类型
// 表明e是字符串 s = e as string; s = <string>e; -
never: 表示永远不会返回结果
-
Object:表示一个对象;默认必选,加上问号表示可选属性;
[propName: string]: any表示任意类型的属性let a:object; a = {}; let b:{name: string, age ?: number} // 指定对象中可以包含哪些队形 b = {name: 'Mannqo'}; // 一定要包含name let c:{name: string, [propName: string]: any}; c = {name: 'Mannqo', a: '1'}; -
array:数组; 两种表示方式:类型[]或Array<类型> ;
string()表示字符串数组;number[]表示数值数组let d:string[]; d = ['a', 'b', 'c']; let f:Array<number>; f = [1, 2, 3]; -
元组,固定长度的数组
let h: [string, string]; h = ['a', 'b']; -
enum枚举
enum Gender { Male = 0, Female = 1 }
&表示同时,
let j: {name: string} & {age:number};可以对对象中的属性值进行规范;可以给类型设置别名:
type myType = string;(别名长的时候可以使用)
二、TS编译配置
-
include:指定需要编译的文件列表,支持全局匹配
{ "include": ["src/**/*"] } -
exclude:指定include选项时,需要忽略的文件列表;
exclude只会对include的解析结果有影响; -
files:用来指定需要编译的文件列表(不是文件夹);适用于指定文件数量较少且不需要全局匹配的情况。
complierOption编译器的选项
-
target:指定ts被编译版本;
"target": "ES6"默认为ES3; -
module:指定要使用的模块化规范;
module: "commonjs"参数值:
'none'; 'commonjs'; 'amd'; 'system'; 'umd'; 'es6'; 'es2015';..... -
lib:用来指定项目中要使用的库;
"lib": ["es6", "dom"]; -
outDir:用来指定编译后文件所在的目录;
"outDir": "./dist" -
outFile:将代码合并为一个文件(指定文件名);
"outFile: "./dist/app.js" -
allowJs:是否对js文件进行编译,默认为false;
-
checkJs:是否检查js代码是否符合语法规范,默认为false;
-
removeComments:是否移除注释,默认为false;
-
noEmit:不生成编译后的文件;默认为true;
-
noEmitOnError:当有错误的时候不生成js文件,默认为false;
-
strict:所有严格检查的总开关;如果这个为true,即全都为严格检查,默认为false;
-
alwaysStrict:用来设置编译后的文件是否使用严格模式,默认为false;
-
noImplicitAny:不允许隐式的any类型,默认为false;
-
noImplicitThis:不允许不明类型的this,默认为false;
-
strictNullChecks:严格地检查空值,默认为false;
三、面向对象
1. 定义属性/方法
-
直接定义的属性是实例属性,通过对象的实例去访问
-
定义实例属性 readonly开头的属性表示一个只读属性,无法修改
-
如果用static去定义,那么这个属性就是类属性/方法,比如age,直接通过
Person.age就可以拿到class Person { readonly name: string = 'mannqo'; age = 18 static age: number = 19; static sayHello() { console.log('hello'); } }
2. 构造函数
- 子类拥有父类的所有属性和方法;
class Son extends Father{} - 通过继承可以将多个类中共有的代码写在一个父类中
- 如果子类添加了和父类一样的方法就会覆盖
3. 属性的封装
-
public 修饰的属性可以在任意位置访问(修改)默认值
-
private 私有属性,只能在类内部进行访问(修改)
通过在类中添加方法使得私有属性可以被外部访问
private name: string; constructor(name: string) { this.name = name; } getName() { return this.name; } setName(value: string) { this.name = value; }也就是说,可以通过在类中定义方法来 获取或修改 私有属性;此时在修改的方法中可以设置传入参数的范围;
-
protected 受包含的属性,只能在当前类和当前类的子类进行访问
-
getter方法用来读取属性,setter方法用来设置属性,他们分别成为属性的存取器;
get name() { return this._name; } set name(value: string) { this._name = value; }这样设置之后,通过
实例对象.name就可以获取到对应的属性值;
4. 泛型
在定义函数或类时,如果遇到类型不明确的就可以使用泛型
可以直接调用具有泛型的函数
function fn<T>(a: T): T {
return a;
}
let result = fn(10);// 不指定泛型,TS可以自动对类型进行判断
let result2 = fn<string>('hello');