对typescript重新思考

引言

最近有在看一些关于typescript的东西,以前的理解就仅仅只是认为它比JavaScript多了一个类型检测,后来发现了一篇非常好的文章,让我重新对typescript进行了思考,但是由于本人没有写过typescript,所以准备从实践入手,深入理解关于面向接口编程的原理,故这是一篇长期更新的博客哈哈哈哈。

具体的概念示例代码等,官方文档里面都写得十分详细。我就只是阐述一下自己的理解。

接口

typescript里面接口的作用就是对这些类型命名和为自己的代码或者第三方代码定义契约,我个人对于接口的理解有很多:

  1. 可以定义新的类型(普通对象/函数)
  2. 定义类类型,ts用它来明确强制一个类去符合某种契约(这是功能与Java类似)用发 implement <接口名称>

注意:当一个类实现一个接口时,只对其实例部分进行类型检查。

接口可以互相继承、定义混合类型、接口还可以继承类

泛型

主要是用来做类型约束,比如我不规定参数和返回值的类型,但是我必须保证参数和返回值类型相同。

  • 泛型类型(变量、函数、接口)最全面的示例:
interface GenericIdentityFn<T> {// 接口
    (arg: T): T;
}

function identity<T>(arg: T): T {// 函数
    return arg;
}

let myIdentity: GenericIdentityFn<number> = identity;
  • 泛型类
class GenericNumber<T>{
    zeroValue:T;
    add:(x:T,y:T)=>T
}
  • 泛型约束举例

    1. 类类型:在typescript使用其创建工厂函数,需要引用构造函数的类类型

      function create<T>(c:{new ():T;}):T{
      	return new c();
      }
      
    2. 类型参数

      function getProperty<T,K extends keyof T>(obj:T,key:K):T[K]{
          return obj[key];
      }
      
      let x = { a: 1, b: 2, c: 3, d: 4 };
      getProperty(x, 'b'); // okay
      

高级类型(简单写,方便查看)

  • 交叉类型 & (类型断言防止编译器报错)
  • 联合类型 |
  • 类型保护与区分类型(typeof、instanceof、params is type)
  • null类型:(–strictNullChecks、a!语法从a的类型里面去除null和undefined)
  • 类型别名(包括基本类型:type Name=string):不能被extends implements
  • 可辨识联合,完整性检查(–strictNullChecks+number或者never)
  • 多态的this类型
  • 索引类型(keyof T[K])
  • 映射类型(旧类型换成新类型,)

三斜线指令

/// <reference path="..." />

主要是一种引入外部库地方案,还有很多其他的方案,可以自行查阅文档。

typescript思想

  • 更加明确的模块抽象过程,把考虑抽象和拓展看作写一个模块前的必备环节

ts“超”在哪里

typescript是JavaScript的超集,超在哪里?

  • typescript为JavaScript引入了一套类型系统
  • typescript支持一些非ECMAScript正是标准的语法,比如装饰器

学习资料

结语

感觉又长胖了,难受香菇,明天也要加油鸭~

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章