直接上代码:
// 原始类型let bool: boolean = truelet num: number = 123let str: string = 'abc'// str = 123// 数组let arr1: number[] = [1, 2, 3]let arr2: Array<number> = [1, 2, 3]//数组,联合类型let arr3: Array<number | string> = [1, 2, 3, '4']// 元组,无法进行修改。可是使用push方法,但还是无法进行越界访问(不推荐使用push)let tuple: [number, string, string] = [0, '1', '2']// tuple.push(2)// console.log(tuple)// tuple[2]// 函数let add = (x: number, y: number) => x + ylet compute: (x: number, y: number) => numbercompute = (a, b) => a + b// 对象let obj: { x: number, y: number } = { x: 1, y: 2 }obj.x = 3// symbol(具有唯一的值),常用于常量定义let s1: symbol = Symbol()let s2 = Symbol()// console.log(s1 === s2) false// undefined, nulllet un: undefined = undefinedlet nu: null = null/*** 如果要让undefined, null可以赋值给普通变量,* 那么需要设置tsconfig中, strictNullChecks为false*/// num = undefined// num = null// void(可指没有任何返回值的函数)let noReturn = () => {}// any,可以任意进行赋值let xx = 1x = []x = () => {}// never ,抛出错误,或者死循环let error = () => {throw new Error('error')}let endless = () => {while(true) {}}枚举://枚举在运行环境中,其实是一个对象// 数字枚举enum Role {Reporter = 1,Developer,Maintainer,Owner,Guest}// console.log(Role.Reporter)// console.log(Role)// 字符串枚举enum Message {Success = '恭喜你,成功了',Fail = '抱歉,失败了'}// 异构枚举,数字和字符串枚举混用(不建议使用)enum Answer {N,Y = 'Yes'}// 枚举成员// Role.Reporter = 0,枚举被定以后不能被修改enum Char {// const membera, //普通数字b = Char.a,//对已有枚举的引用c = 1 + 3,//常量表达式// computed member,以下两个会被保留到执行阶段进行计算d = Math.random(),e = '123'.length,f = 4}// 常量枚举,编译后会被移除,自动替换使用变量为具体值const enum Month {Jan,Feb,Mar,Apr = Month.Mar + 1,// May = () => 5}let month = [Month.Jan, Month.Feb, Month.Mar]// 枚举类型enum E { a, b }enum F { a = 0, b = 1 }enum G { a = 'apple', b = 'banana' }//相同枚举类型成员才可以进行比较,否则不允许进行比较let e: E = 3let f: F = 3// console.log(e === f)let e1: E.a = 3let e2: E.b = 3let e3: E.a = 3// console.log(e1 === e2)// console.log(e1 === e3)//字符串枚举,其值只能为枚举类型值let g1: G = G.alet g2: G.a = G.a
基础类型:
let isDone: boolean = false;let decLiteral: number = 6;let name: string = "bob";let list: number[] = [1, 2, 3];let list: Array<number> = [1, 2, 3];
模板字符串
let sentence: string = `Hello, my name is ${ name }.I'll be ${ age + 1 } years old next month.`;
元祖Tuple:
let x: [string, number];x = ['hello', 10]; // OKx = [10, 'hello']; // Error
越界时,联合类型进行替代(凡是元祖内的类型都可进行存储)
x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toStringx[6] = true; // Error, 布尔不是(string | number)类型
枚举
enum Color {Red, Green, Blue}let c: Color = Color.Green;
默认枚举值按0开始,也可以手动指定
enum Color {Red = 1, Green = 2, Blue = 4}let c: Color = Color.Green;//可以类似数组,直接进行访问let colorName: string = Color[2];
Any类型
let notSure: any = 4;notSure = "maybe a string instead";
Void
let unusable: void = undefined;
Null和Underfined
let u: undefined = undefined;let n: null = null;
默认情况下null和undefined是所有类型的子类型,可以把 null和undefined赋值给number类型的变量
当你指定了—strictNullChecks标记,null和undefined只能赋值给void和它们各自,也许在某处你想传入一个 string或null或undefined,你可以使用联合类型string | null | undefined
Nerver
never类型表示的是那些永不存在的值的类型
never类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是never的子类型或可以赋值给never类型(除了never本身之外)。 即使 any也不可以赋值给never
Object
object表示非原始类型,也就是除number,string,boolean,symbol,null或undefined之外的类型
类型断言
类型断言好比其它语言里的类型转换
方法一:
let someValue: any = "this is a string";let strLength: number = (<string>someValue).length;
方法二:
let someValue: any = "this is a string";let strLength: number = (someValue as string).length;
