04-TypeScript的类型(2)

187 阅读2分钟
  • object类型, 表示对象类型, 举例

    let a: object; // 声明变量a为对象类型
    let b = {}; // 声明b为对象类型
    

    一般情况下, 我们不这么使用。 因为声明为object或者{}没有意义。 我们通常这样做

    let a: {name: string, age: number}; //定义一个对象变量a, 包含属性name和age, 并且name的值为string类型, age的值为																				number类型, 要使用a这个对象, 必须有name和age属性
    a = {name: "飞翔的企鹅"}; // 只有name属性, 错误
    a = {name: "飞翔的企鹅", age: 18}; // 正确
    
    // 如果要声明一个对象变量, 只必须name属性, 其他属性可选, 可以这样做
    let b: {name: string, [propName: string]: any};
    b = {age: 18, gender: "male"}; // 无必须name属性, 错误
    b = {name: "飞翔的企鹅", age: 18}; // 有必须name属性, 正确
    b = {name: "飞翔的企鹅"age: 18, gender: "male"}; // 有必须name属性, 正确
    
    // 设置函数结构的类型声明
    let c: (x: number, y: number)=> number;
    c = function(x, y) {
      return x + y;
    }
    console.log( c(1, 1) ); // 打印 2
    
  • array类型, 表示数组类型, 举例

    // 数组的两种表现方式
    
    // 1. 语法: 关键字 变量名: 类型[]
    let a: string[];
    a = ['1', '2', '3'];
    
    // 2. 语法: 关键字 变量名: Arrary<类型>
    let b: Arrary<number>;
    b = [1, 2, 3, 4, 5];
    
  • tuple类型(TS新增类型), 表示元组类型, 实质为固定长度的数组, 举例

    let a: [string, string];
    a = ['hello', 'world']
    
  • enum类型(TS新增类型), 表示元组类型, 举例

    enum a {
        spring = 0, // 默认从0开始
        summer = 1,
        autumn,
        winter
    }
    console.log(a.spring) // 打印 0, 枚举值默认从0开始
    

补充: 类型的别名, 举例

// 使用myString替代string
type myString = string;
let a: myString = "hello world";

type myNum = 1 | 2 | 3 | 4 | 5;
let b: myNum = 1; // 1是myNum类型, 正确
let b: myNum = 2; // 2是myNum类型, 正确
let b: myNum = 6; // 6不是myNum类型, 错误