学习Typescript(第一弹)

Typescript的基础类型

Boolean类型

let bool: boolean = true;

Number类型

let num: number = 222;

String类型

let str: string = '石马上coding';

数组Array类型

  • 对数组类型的定义有两种方式:
let arr1: number[] = [1,2,3];
let arr2: Array<number | string> = [1,2,'石马上coding']; // Array是ts预定义的泛型接口

元组tuple类型

  • 表示一个已知数量和类型的数组,可以理解为他是一种特殊的数组
// 限制了数组元素的个数和类型,
let tuple: [number, string] = [0, '1'];
// tuple.push(2) 元组可以使用push方法插入新元素,是元组越界bug,
// tuple[2] 会报错,不允许访问

函数

let add = (a: number,b: number): number => a + b
let plus: (a: number,b: number) => number // 函数类型
plus = (a,b) => a + b

object对象

  • object 类型用于表示所有的非原始类型,即我们不能把 number、string、boolean、symbol等 原始类型赋值给 object。在严格模式下,null 和 undefined 类型也不能赋给 object。
  • 大 Object 代表所有拥有 toString、hasOwnProperty 方法的类型 所以所有原始类型、非原始类型都可以赋给 Object(严格模式下 null 和 undefined 不可以)
  • {} 空对象类型和大 Object 一样 也是表示原始类型和非原始类型的集合

let obj: object = { x:1, y:2 }
obj = 1; // 报错
obj = "a"; // 报错
obj = true; // 报错
obj = null; // 报错
obj = undefined; // 报错
obj = {}; // 正确

let obj2: { x:number, y:number } = { x:1, y:2 }
obj2.x = 3;

let obj3: Object = { x:1, y:2 }
obj3 = 1; // 正确
obj3 = "a"; // 正确
obj3 = true; // 正确
obj3 = null; // 报错
obj3 = undefined; // 报错
obj3 = {}; // 正确

let obj4: {}
obj4 = 1; // 编译正确
obj4 = "a"; // 编译正确
obj4 = true; // 编译正确
obj4 = null; // 报错
obj4 = undefined; // 报错
obj4 = {}; // 正确

Class类

class Car {
  name: string;
  color: number;
  constructor(name: string, color: number) {
    this.name = name;
    this.color = color;
  }
  likeColor(): void {
    console.log(`I like ${this.color}`);
  }
}

Symbol

let s1: symbol = Symbol();
let s2 = Symbol();

undefined, null

// undefined, null  不能赋值为其他类型
let unde: undefined = undefined;
let nu: null = null;
// 关闭tsconfig.json里的strictNullChecks:false,其他类型的值可以赋值为undefined和 null 
// num = undefined
// num = null

void类型

  • void是一个操作符,可以让任何表达式返回undefined
/** 
eg:void 0 
因为undefined可以赋值所以 void 可以确保返回的一定是undefined
*/
let noReturn = ():void => {}

any类型

  • 会跳过类型检查器对值的检查,任何值都可以赋值给any类型
let x:any = 2
x = [];
x = () => {};

Unknown 类型

  • unknown与any一样,所有类型都可以分配给unknown
  let value: unknown = 1;
  value = "qqq";
  value = false;
  • unknown与any的区别
    • 任何类型的值可以赋值给any,同时any类型的值也可以赋值给任何类型
    • unknown 任何类型的值都可以赋值给它,但它只能赋值给unknown和any

never类型

  • 永远不会有返回值的类型
// never,永远不会有返回值的类型
let error = ():never => { // 抛出异常
    throw new Error('error')
}

let endless = ():never => { // 死循环
    while(true){}
}

Enum枚举类型

  • 一组具有名字的常量集合,定义后不能修改
数字枚举
enum Role {
    Alice = 1, // 可以指定为1,不写默认是0开始递增
    Jack,
    Apple
}
console.log(Role) // 打印出来类似对象
  • 打印出来类似对象,数字和字符串都作为key,说明有反向映射
字符串枚举
enum Test {
    First='Hello',
    Second='World'
}
  • 打印出来,赋值的字符串作为了value,没有作为key,说明没有反向映射!!!
异构枚举
  • 数字枚举和字符串枚举混用,容易混淆,不建议使用
enum Answer {
    First,
    Second='ok'
}
  • 只有数字枚举有反向映射
枚举成员
  • const 常量成员
    • 没有初始值
    • 对已有成员的引用
    • 常量的表达式,在编译的时候计算出结果,以常量的形式出现在运行时环境
  • computed 需要被计算的成员
    • 一定要赋值,不然会报错
    • 不会在编译阶段计算,在运行时才会被计算
enum Char {
    // const 常量成员
    a, // 没有初始值
    b = Char.a, // 对已有成员的引用
    c = 1 + 3, // 常量的表达式,在编译的时候计算出结果,以常量的形式出现在运行时环境
    // computed 需要被计算的成员, 一定要赋值,不会在编译阶段计算,在运行时才会被计算
    d = Math.random(), 
    e = 'abc'.length,
}
console.log(Char)
  • 编译后
    const成员的值已经计算出结果了,computed成员的值被保留了,要运行时才会被计算
常量枚举
  • 用const定义的枚举就是常量枚举,会在编译阶段被移除
  • 当我们不需要对象,只需要对象的值的时候就可以使用常量枚举,可以减少编译环境的代码
const enum Month {
    Jan,
    Feb,
    Mar
}
let month = [Month.Jan, Month.Feb, Month.Mar]
  • 编译后,只是把枚举的值编译出来了
枚举类型
  • 不同类型是不可以比较的

enum E { a,b } // 都没有初始值
enum F { a = 1,b = 2 } // 初始值都为数字
enum G { a = '1',b = '2' } // 初始值都为字符串

// 不同类型是不可以比较的
let e:E = 3
let f:F = 3
// e === f  会报错

let e1:E.a = 1
let e2:E.b = 2
let e3:E.a = 1
// e1 === e2 也会报错
// e1 === e3 可以

let g1:G = G.b
let g2:G.a = G.a

学习Typescript(第二弹)

学习Typescript(第三弹)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值