TS学习随笔(二)->类型推论,联合类型

 

这篇内容指南:git

          -----类型推论github

     -----联合类型typescript

 

类型推论spa

第一篇中咱们看了TS的基本使用和基本数据类型的使用,知道了变量在使用的时候都得加一个类型,那咱们可不能够不加呢,这个嘛,能够也不能够,为啥这木说呢,各位看官咱们上眼瞧一下.3d

首先咱们要来先了解一个概念,类型推论:若是没有明确的指定类型,那么 TypeScript 会依照类型推论(Type Inference)的规则推断出一个类型code

例子一:blog

let myFavoriteNumber = 'seven'; myFavoriteNumber = 7; // index.ts(2,1): error TS2322: Type 'number' is not assignable to type 'string'.

看吧,没指定类型报错了吧。由于这样赋值等同于ip

   let myFavoriteNumber: string = 'seven';get

可是我为啥说的是能够也不能够呢,来,咱们继续瞧一瞧string

例子二:

let myFavoriteNumber; myFavoriteNumber = 'seven'; myFavoriteNumber = 7;

哎,这样咋没报错,其实在定义的时候没有赋值,无论以后有没有赋值,都会被推断成 any 类型而彻底不被类型检查

这就是JS的类型推论,是否是美滋滋,这样妈妈就不再担忧我参数类型传的有问题了

 

联合类型

  咱们想一想会不会有这个情景,一个变量咱们既容许他是string又能够是number,那咱们怎么办呢,用any吗?显然是不行的,用any那不是什么类型都能传进去了,那咱们怎么作呢,这里就又要亮出一个概念了

   这就是咱们要说的联合类型,这个概念一看就知道是把几个类型联合起来,那怎么实现啵,跟概念同样简洁明了

let Adam:string | number Adam =  'seven'; Adam = 7 let Sh:string | number Sh = true
// index.ts(2,1): error TS2322: Type 'boolean' is not assignable to type 'string | number'. // Type 'boolean' is not assignable to type 'number'.

联合类型使用 | 分隔每一个类型。

注意:当 TypeScript 不肯定一个联合类型的变量究竟是哪一个类型的时候,咱们只能访问此联合类型的全部类型里共有的属性或方法

function getLength(something: string | number): number { return something.length; } // index.ts(2,22): error TS2339: Property 'length' does not exist on type 'string | number'. // Property 'length' does not exist on type 'number'.

上述例子会报错,是由于length并非string和number的公共方法

访问 string 和 number 的共有属性是没问题的:

function getString(something: string | number): string { return something.toString(); }

联合类型的变量在被赋值的时候,会根据类型推论的规则推断出一个类型:

 

let myFavoriteNumber: string | number; myFavoriteNumber = 'seven'; console.log(myFavoriteNumber.length); // 5
myFavoriteNumber = 7; console.log(myFavoriteNumber.length); // 编译时报错 // index.ts(5,30): error TS2339: Property 'length' does not exist on type 'number'.

上例中,第二行的 myFavoriteNumber 被推断成了 string,访问它的 length 属性不会报错。

而第四行的 myFavoriteNumber 被推断成了 number,访问它的 length 属性时就报错了。

 

原文参考自:https://github.com/xcatliu/typescript-tutorial/blob/master/basics/union-types.md

相关文章
相关标签/搜索