TypeScript基础知识-基本类型(一)
字符
// 字符 - 模板字符串 占位符
let a: string = "a";
let b: string = "b";
number
// number
let devLiteral: number = 6; // 6
let hexLiteral: number = 0x12; // 18
let binaryLiteral: number = 0b11; // 3
let octalLiteral: number = 0o11; // 8
Boolean
// Boolean
let isBoolean1: boolean = true;
Array
// Array 数据类型+[]、泛型数组
let arr1: string[] = ["test1", "test2", "test3"];
let arr2: Array<string> = ["test1", "test2", "test3"];
元祖 Tuple
// 上述两种方式定义数组类型约束了数组内的元素类型必须一致
// 元祖 Tuple 放宽数据内数据类型 - 已知元素的数量与类型的数组
// tuple 数组类型必须与规定的类型顺序对应起来
let tuple1: [string, number];
tuple1 = ["test", 1];
// tuple1[3] = 'a'; // error
enum 枚举
// enum 枚举 给数字更加易懂的名字, 可以同时通过索引或者字符访问
// 默认情况下,从0开始为一个元素编号
enum Color {
blue,
red,
yellow
}
let colorName: string = Color[2]; // yellow
enum Color {
Red = "RED",
Green = "GREEN",
Blue = "BLUE"
}
let colorName2: string = Color["RED"];
console.log(colorName); // 字符串枚举成员不能反向映射到枚举成员的名字
any 类型
// any 类型 标识JS任意类型的值
// Any类型变量可以被赋值给任何类型数据
// Any类型数据可以赋值给任何数据类型变量(除never外)
// 如果是Any类型,那么可以访问它的任意属性
// Any类型对象的任意属性都是Any类型
// Any类型数据可以当做函数或者构造函数调用, 可以有任意参数
// 如果没有给出明确的数据类型,并且编译器无法腿推断,那么将被规定为Any类型
let anyValue: any = 8;
anyValue.toFixed();
let obj: { a; b };
// 等同于
let obj: {
a: any;
b: any;
};
Void类型
// Void类型 沒有返回值 变量值只能是undefined、null
// void类型是any的子类型,是null和undefined的父类型
let void1: void = null;
let void2: void = undefined;
let temp1: any = 1;
let void3: void = temp1;
let void4: void = void 0;
temp1 = void4;
// any > void > null、undefined void是any类型的子类型,是null、undefined的父类型
let temp: number;
let any: any = '8';
temp = any;
// 默认情况下null和undefined是所有类型的子类型,也就是可以
// 赋值给其他任何类型
// 但是不能复制给never类型
// 当指定--strictNullChecks标记,null和undefined只能赋值给void和它们各自,可以避免很多问题
let u: undefined = undefined;
let n: null = null;
let num: number;
num = undefined;
num = null;
Never类型
// Never类型 那些用不存在的值的类型
let neverVar: never;
// 总是抛出异常或根本就不会有返回值的函数表达式或箭头函数表达式的返回值
// 变量也可能是Never类型,当他们被永不为真的类型保护所约束时
// Never类型时任何类型的子类型,可以赋值给任何类型,只有自身可以赋值
// 即使Any类型也不行
类型断言
// <T>e
// e可以赋值给类型为T的变量
// T类型值可以赋值给e的数据类型的widened form的变量
// widened类型根据上下文来推断变量的类型,无需标注
let str5: string = 'testStr5';
let num5: number = <number><any>str5;
// 当为变量、属性或者函数推断类型的时候,Widened类型将会被使用。
// 一个类型的Widened形式就是将原始数据中的null或者undefined的数据类型由Any类型替换。
箭头函数 this指向问题
// this指向问题
// 严格模式 非函数模式调用this为undefined,非严格模式this会指向全局对象
// 箭头函数与ES6一致