数据类型 | 例如 | 说明 |
number | 1,2,3 | 任意数字 |
string | '1','2','3' | 任意字符串 |
boolean | true, false | 布尔值 |
字面量 | 其本身,0 | 1 , ‘a’ | 'c', true|false | 三种字面量类型 |
any | * | 任意类型 |
unknow | * | 类型安全的any,不能直接赋值给别人 |
void | 空值(undefined) | 没有值或者是undefined |
never | 没有值 | 不能是任何值 |
object | {a:1} | 任意的js对象 |
array | [1] | 任意的js数组 |
tuple | [4,5] | 元素,TS新增类型,固定长度数组 |
enum | enum{A,B} | 枚举,TS中新增类型 |
1. 类型断言:可以用来告诉解析器变量的实际类型
语法: 变量 as 类型 e as string
<类型> 变量
2. object
语法:{属性名: 属性值}
在属性名后面加 ?表示该属性是可选的
let obj = {a: string, b?:string}
----------------------------
[propName: string]: any 表示任意类型属性
let obj = {a: number, [propName: string]: any}
obj = {a: 1, b:'1' , c: 'abc'}
3. 函数
- type fun = (a: number, b: number) => number;
-
- let fun2:fun = (2, 3) => a + b;
三.类
1. class
继承:extends, 可以继承父类的属性和方法,this指向当前调用者
super(): 子类实例化时必须在 constructor构造函数中调用super(); 否则无法实例化;
调用父类构造函数或者 属性和方法
静态属性,和实例属性: 只要属性或方法前加上static 就是静态属性或静态方法;实力属性只有通过new Class() 访问的属性才是 实例属性
2. 抽象类
abstract: 只能作为父类调用,不能实例化该类;例如
- abstract class Person {
- name:string = '默认的名字';
- age: number;
-
- constructor(name:string, age:number) {
- this.name = name;
- this.age = age
- }
- }
3. 接口
interface: 用来定义一个类或者对象的结构,约束一个类中应该有哪些属性和方法,同时接口也可以当成类型声明来使用
接口可以在定义类的时候限制类的结构
- interface myInter {
- name: string,
- age: number
- }
-
- let obj: myInter = {
- name: '张三',
- age: 12
- }
-
-
- // interface 只定义对象的结构,不放实际的值
- interface myInter {
- name: string,
- play():void
- }
4. 修饰符
public , private, protected
1. public 公共的, 本类和其子类都可以访问
2. private 私有的, 只可以本类访问
3. protected 受保护的, 本类和子类都可以访问和修改
- class A {
- public name: string;
- private age: number;
-
- get getName(): string {
- return this.name
- }
- }
5. 泛型