TypeScript 类型推论整理

迈不过友情╰ 2022-06-13 05:47 280阅读 0赞

一、类型推论

TypeScript里,在有些没有明确指定出类型的地方,类型推论会绑定提供类型。

1.最佳通用类型,自动给出

  1. let x = 3;
  2. console.log(typeof x);//输出类型number
  3. //自动给出一个兼容所有类型的类型
  4. let array = [0, 2, null]
  5. console.log(typeof array);//输出类型 object

自定义指定推断类型

  1. function __typeof__(objClass) {
  2. if (objClass && objClass.constructor) {
  3. var strFun = objClass.constructor.toString();
  4. var className = strFun.substr(0, strFun.indexOf('('));
  5. className = className.replace('function', '');
  6. return className.replace(/(^s*)|(s*$)/ig, '');
  7. }
  8. return typeof (objClass);
  9. }
  10. class Animal {
  11. name: string;
  12. show() {
  13. //获取当前js执行的父类名称
  14. console.log(__typeof__(this));
  15. }
  16. }
  17. class Rhino extends Animal {
  18. move(distance: number) {
  19. console.log(`Rhino当前活动:${distance}`);
  20. }
  21. }
  22. class Elephant extends Animal {
  23. move(distance: number) {
  24. console.log(`Elephant当前活动:${distance}`);
  25. }
  26. }
  27. class Snake extends Animal {
  28. move(distance: number) {
  29. console.log(`Snake当前活动:${distance}`);
  30. }
  31. }
  32. let zoo = [new Rhino(), new Elephant(), new Snake()];
  33. console.info(typeof zoo);
  34. let zoo2: Animal[] = [new Rhino(), new Elephant(), new Snake()];
  35. console.info(typeof zoo2);
  36. //循环遍历
  37. zoo2.forEach(element => {
  38. element.show();
  39. });

2.上下文类型

TypeScript类型推论也可能按照相反的方向进行,即‘按上下文归类’。表达式的类型与所处的位置相关。

  1. window.onmousedown = function(mouseEvent) {
  2. console.log(mouseEvent.buton); //<- Error
  3. };

使用any类型,可以使编译器忽略,类型判断

  1. window.onmousedown = function(mouseEvent: any) {
  2. console.log(mouseEvent.buton); //<- Now, no error is given
  3. };

更多:

TypeScript 枚举使用整理

TypeScript 泛型使用整理

TypeScript 函数使用整理

发表评论

表情:
评论列表 (有 0 条评论,280人围观)

还没有评论,来说两句吧...

相关阅读

    相关 TypeScript 高级类型整理

    一、交叉类型(Intersection Types) 交叉类型是奖多个类型合并为一个类型。这往我们可以把多个现有的多种类型叠加成为一种类型,它包含了所需的所有类型的特性。主要

    相关 TypeScript 函数使用整理

    一、介绍 函数是JavaScript应用程序的基础。它帮助你实现抽象层、模拟类,信息隐藏和模块。在TypeScript里,虽然已经支持类,命名空间和模块等,但函数仍然是主要定