typescript基础深入 发表于 2018-10-15 深入了解ts的基础,才能更好的开发! 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102// 具名函数function add(x: number, y: number): number { return x + y;}let handle = (x: number, y: number): number => { return x + y;}// 这里表示handle1变量的类型为一个函数, 接收两个参数, 返回值为number类型// 注意不要混淆了 TypeScript 中的 => 和 ES6 中的 =>。// 在 TypeScript 的类型定义中,// => 用来表示函数的定义,左边是输入类型,需要用括号括起来,右边是输出类型。// ES6 中箭头函数 => 左边是函数定义,右边是实现体。let handle1: (x: number, y: number) => number;handle1 = (xx, yy): number => { return xx + yy;}handle1(1, 2);// 将变量类型抽取到接口中// 函数类型的接口声明是匿名的。interface IHandleType { (x: number, y: number): number;}let handle2: IHandleType = (xxx, yyy) => { return xxx + yyy;}// 但是对象的类型声明的函数是具名的。interface UIElement { addEventListener(onclick: (this: void, e: Event) => void): void;}let src: UIElement = { addEventListener() { }}function reverse(x: number | string): number | string { if (typeof x === 'number') { return Number(x.toString().split('').reverse().join('')); } else { return x.split('').reverse().join(''); }}// 定义返回值为元祖类型, 其实就是一个数组(只是存放了不同类型的数据)function returnTuple(): [string, number] { return ["dottie", 23];}let tuple: [string, number] = returnTuple();console.log(tuple) // [ 'dottie', 23 ]console.log(typeof tuple); // objectconsole.log(Array.isArray(tuple)) // true// 定义枚举enum Days { Sun, Mon, Tue, Wed, Thr, Fri, Sat,}console.log(Days["Sun"] === 0); // trueconsole.log(Days.Sun === 0); // true// 修饰类 (类类型)class Greeter { static standardGreeting = "hello, dottie"; greeting: string = ""; greet() { if (this.greeting) { return `hi, ${this.greeting}`; } else { return Greeter.standardGreeting; } }}let greeter1: Greeter;greeter1 = new Greeter();console.log(greeter1.greet()); // hello, dottielet greeterMaker: typeof Greeter = Greeter;let greeterMaker1: new (...args: any[]) => Greeter = Greeter;let greeterMaker2: typeof Greeter = Greeter;console.log(typeof greeterMaker1); // functionconsole.log(typeof greeterMaker1 === typeof greeterMaker2); // true// typeof Greeter 和 new () => Greeter 的区别在于:// typeof Greeter表示Greeter类的类型,里面包含了Greeter类中所有的静态成员和构造函数// new () => Greeter表示创建一个里面是空的,但是它也是Greeter类的类型, 所以这里就没有standardGreeting属性了。// new (...args: any[]): Greeter; 这里的new (...args: any[]) 表示的是类类型的定义,返回值为Greeter类型greeterMaker.standardGreeting = "Hey dottie";let greeter2: Greeter = new greeterMaker();console.log(greeter2.greet()); // Hey dottie