在线时间:8:00-16:00
迪恩网络APP
随时随地掌握行业动态
扫描二维码
关注迪恩网络微信公众号
为了面向ng2和前端未来,开始搞向ts,ts是微软出的一枚语言,作为es6的超集,他出的一些特性还是蛮好用的(略坑)。对于我等纯前端(从开始就接触javascript)的人来说,真想说,这特么什么鬼。部分特性同es6(个人对es6还是蛮有好感的)。ts同期的coffeescript,将js python化,ts也把js搞的向其他语言靠拢。。 中文学习,这里是英文学习。如果不想看这些东西,那看我笔记学吧。哈哈。 ts的基础类型,布尔值,数字,字符串,数组,元组(Tuple),枚举,任意值,空值。后面几个你不知道的就是新加的类型。看他们怎么定义。 ts定义有Interface,熟悉其他语言可能知道,这为类型的安全。布尔值定义为 let isDone: boolean = false; 数字为,需要注意的是它还支持了es6的2进制和8进制。 let decLiteral: number = 6; let hexLiteral: number = 0xf00d; let binaryLiteral: number = 0b1010; let octalLiteral: number = 0o744; 字符串, let name: string = "bob";
name = "smith";
还支持es6的模版定义的形式(不懂es6的看阮一峰的es6入门) let name: string = `Gene`; let age: number = 37; let sentence: string = `Hello, my name is ${ name }. I'll be ${ age + 1 } years old next month.`; 数组可以 let list: number[] = [1, 2, 3]; 也可以 let list: Array<number> = [1, 2, 3]; 两种方式。 其实看一下前面这些js原有的类型,定义的时候只是多了一个:类型,如果变量赋值的时候类型不对,编译器就会报错。类型安全orz。(写惯js的我看着不习惯)。编译后的js里面还是原来的类型定义。
下面看新类型 元组: // Declare a tuple type let x: [string, number]; // Initialize it x = ['hello', 10]; // OK // Initialize it incorrectly x = [10, 'hello']; // Error
这个元组就是约定类型的已知数量的数组。x[0]是string类型,x[1]是number类型,只要不是编译器就报错。 console.log(x[0].substr(1)); // OK console.log(x[1].substr(1)); // Error, 'number' does not have 'substr'
这里用x[1]是数字类型,没有substr,就报错了。 x[3] = 'world'; // OK, 字符串可以赋值给(string | number)类型 console.log(x[5].toString()); // OK, 'string' 和 'number' 都有 toString x[6] = true; // Error, 布尔不是(string | number)类型
当越界访问的时候,这个东西可以是string | number,别的都报错。如上。 枚举
enum Color {Red, Green, Blue};
let c: Color = Color.Green;
先看一下编译器编译的js的Color是什么 这里定义的c是Color类型,赋值为Color.Green,看上面的图,就知道是1。当你取Color[1]的时候也就是Green。 enum Color {Red = 1, Green, Blue};
let c: Color = Color.Green;
enum Color {Red = 1, Green = 2, Blue = 4};
let c: Color = Color.Green;
这样都可以。那么对应的序号也会相应的改变。 任意值(any) 当你不知道一个变量是啥类型,这个类型检测就没必要了吧。 let notSure: any = 4; notSure = "maybe a string instead"; notSure = false; // okay, definitely a boolean
那定义这个any就会跳过编译器的检测。 你可能认为 let notSure: any = 4; notSure.ifItExists(); // okay, ifItExists might exist at runtime notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check) let prettySure: Object = 4; prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.
定义数组,数组里面类型不同的时候也该用any let list: any[] = [1, true, "free"]; list[1] = 100; 空值 它表示没有任何类型,就像其他语言里的void,来表示这个函数不返回值。 function warnUser(): void { alert("This is my warning message"); }
声明一个 let unusable: void = 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;
两种形式是等价的。当然在jsx里面用第一种就不行了。
|
请发表评论