TS 对象 Object 的定义非常明确
如果直接使用 object 类型定义,相当于 {},调用会报错,改为 any 就好。
可选参数、默认参数只能放到参数列表末尾,否则会报错
类是一个特殊函数,定义、更新、声明函数,特性封装、继承、多态;
访问修饰符:public private protected
class 中成员变量、成员方法默认都是公共的
public:语法糖,声明公共成员变量及constructor 传参初始化公共成员变量的语法糖
公共成员变量,可以在实例化对象-key方式直接更新、获取
private:私有成员变量,仅在class内部使用,外部无法直接访问;可以在class内部暴露公用成员方法,更新或者取值;
type assertions类型断言:变量为联合类型或者any时,明确知道当前类型时,可以进行断言
let msg:any
msg = 'this is a string'
const res = (<string>msg).endsWith('s');
const res = (msg as string).endsWith('s');
any: 定义可以为任何类型,减少复杂类型,快速开发,不会保障类型安全
unknown:定义为未知类型,类型推论,保障类型安全
枚举类型:枚举类型值默认从0开始,可以简写;也可以指定初始值,每个枚举依次累加;
也可自定义每个枚举项数值;
enum Color {
red, // 0
orange, // 1
yellow // 2
}
enum Color {
red = '红色',
orange = '橙色',
yellow = '黄色'
}
联合类型:为变量指定多种类型,类型用 | 间隔,此变量可以为联合类型中任何一种类型
let union1: number | string | boolean = 1;
字面量类型: 指定变量类型及取值范围,可以组合联合类型一块使用;
let union2:1 | 'str' | [1,2,3] = '字面量类型'
元祖:固定长度、类型、类型顺序的数组类型;
push可以突破元祖类型限制
const person1 = [1, 'name'] // --- 不是元祖,是联合类型,仅限制类型;长度及类型顺序无限制
全局作用域 函数作用域
es6 块状作用域
为什么使用TS
TypeScript
TypeScript
class类
getter setter
泛型
let lastInArray = <T>(arr:T[]) =>{}
let lastInArray = <T>(arr:Array<T>) =>{}
此时的arr的可以是任意类型的数组且不显示为any
类型适配
(<string>message)需要圆括号括起来
或者使用 as 断言
Array 数组类型
tuple 元组类型
Number数字类型
String字符串类型
boolean布尔类型
typescript类型:boolean string number array tuple enum null undefined object void never any 以及高级类型 union组合类型 Nullable可空类型 Literal预定义类型
Class 类
Generics 泛型
创建Module模块
把class放到单独文件中,再export类,支持外部文件访问
引入外部文件:import { Point } from "./point"
访问修饰符:public, private, protected
private:私有属性,外部无法访问
如果需要访问私有属性,需要使用getter, setter
Interface接口
Object对象类型
ts对对象类型的定义:键类型对key to type(js是键值对)
?是可选参数
code: number = 0 默认参数
类型适配(类型断言)Type Assertions:通知TS进行类型适配的过程
let message: any;
message = "abc";
mesage.endsWith("c");
let ddd = (<string>message).endsWith("c")
let ddd2 = (message as string).endsWith("c")
void
undefined:变量没有赋值,没有初始化
void:变量本身就不存在
never:一个函数永远执行不完
Any任意类型
Unknown未知类型
不保证类型,但能保证类型安全
使用Any适合快速成型,快速上线,但有一定的安全隐患
使用Unknown更加保险,保证类型安全
Enum枚举类型
Union联合类型
一个变量可以支持两个或者几个不同的类型,用竖线分割
let union: string | number
let union2 : number | string | boolean | string[]
Literal字面量类型,表示固定值(字面意义)
let union3: 0 | 1 | 2
let literal : 1 | "2" | true | [1,2,3,4]