TypeScript学习记录

55 阅读2分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第 2 天

TS与JS的区别

JS和TS都是弱类型语言,但是JS是动态类型的,而TS是静态类型的。 静态类型的语言可读性更强,所以基于语法解析TSDoc,ide更强,同时,可维护性也增强了,因为TS在编译阶段会暴露大部分错误,不会等到项目运行时再报错,在多人合作的大型项目中,能获得更好的稳定性和开发效率。 同时,TS作为JS的超集,包含于兼容所有JS特性,支持共存,并支持渐进式引入与升级。

泛型

在软件开发中,我们不仅要创建一致的定义良好的 API,同时也要考虑可重用性。 组件不仅能够支持当前的数据类型,同时也能支持未来的数据类型,这在创建大型系统时为你提供了十分灵活的功能。可以使用泛型来创建可重用的组件,一个组件可以支持多种类型的数据。相比较与C#和Java,TypeScript可以使用泛型来创建可重用的组件。支持当前数据类型,同时也能支持未来的数据类型。扩展灵活。

  • 简单泛型使用
function test<T>(argL T): T {
    return arg
}
// 这个函数会返回任何传入它的值
  • 传入所有参数,包括类型
   const res = test<string>("testString");
}
  • 把泛型变量 T 当做类型的一部分使用,而不是整个类型,增加了灵活性
 function test<T>(arg: Array<T>): Array<T> {
  console.log(arg.length); // Array有length方法
  return arg;
}
}
  • 泛型接口

interface creatTest<T> {
  (arg: T): T;
}

function test<T>(arg: T): T {
  return arg;
}

let res: creatTest<number> = test;
  • 除了泛型接口,我们还可以创建泛型类。
// 泛型类看上去与泛型接口差不多。 泛型类使用( <>)括起泛型类型,跟在类名后面。
class creatNum<T> {
  num: T;
  add: (x: T, y: T) => T;
}

let res = new creatNum<number>();
res.num = 0;
res.add = function (x, y) {
  return x + y;
};
// 泛型类指的是实例部分的类型,所以类的静态属性不能使用这个泛型类型。