TS系列教程三:TS常用类型

125 阅读3分钟

概述和基本定义

js的数据类型分为8种:

  • string
  • number
  • boolean
  • bigint
  • symbal
  • object
  • undefined
  • null

ts继承了js的类型设置,通常我们把这些类型称为ts的基本类型。

let a:string;
let c:number;
let c:boolean;
...

undefined和null即是type也是value,这两兄弟比较特殊,再除去object,剩下的五种类型就是js的最基本类型。

包装对象的概念

'hello'.length

只有对象才有属性和方法,上边的代码之所以能执行,是因为js在访问字符串属性的时候会自动转换为字符串对象,转换为的对象称之为包装对象,这个过程叫自动装箱

const s1:String = 'hello'; // 正确
const s2:String = new String('hello'); // 正确

const s3:string = 'hello'; // 正确
const s4:string = new String('hello'); // 报错

简单记录下,五种基本类型都对应有一个首字符大写的包装类型,我们只用小写就行。因为ts把很多js方法参数都定义为了小写,大写会报错的

let a:Number=5;
Math.abs(a);//报错

Object和object

Object代表广义对象,js有句话叫一切皆对象,说的就是此对象,但是它不包含null和undefined

const obj:Object
obj='star';
obj=18;
obj=null;//报错
const obj:{};//简写形式

object代表狭义对象,包含数组、对象、函数,不包含基本类型

值类型(字面量类型)

const hello='hello';

当const定义变量时,如果不是对象类型,会被推断为值作为类型,这个变量也只能被赋值成这个值,因为const定义的本来就是地址不变的常量

const obj={
    name:"张三"
}

当const定义的变量是个对象,会被推断为对象,例如上边的例子,会被推断为{name:string}

const a:5=4+1//报错
const b:number=4+1//不报错

上边是会报错的特殊情况,开发中也不会用到,因为等号左侧计算完是number类型,number类型不属于5类型,所以报错,如果反过来就对了,因为5属于number类型,5是number的儿子。

联合类型

多种类型组合成的一种新类型叫联合类型,类型中间以|隔开

let a:string|number;
a = 5;
a = 'hello';

let b:string|boolean;
b = 'hello';
b=true;

交叉类型

多种类型组合成的一种新类型叫交叉类型,中间以&隔开。常用于对象类型的继承

let a:{a:string}&{b:number};
a={
    a:'hello',
    a:5
}

别名type

为了书写方便给一组类型定义一个新的名称


type Obj={
    a:string,
    b:string,
    c:string,
}
let a:Obj;

别名一般首字符大写,同样的也可用联合类型、交叉类型和别名共同使用

type Obj={
    a:string,
    b:string,
    c:string,
}
let a:Obj|number;//别名和联合类型使用
let b:Obj&{d:number};//别名和交叉类型使用

typeof的使用

js的typeof

typeof undefined; // "undefined"
typeof true; // "boolean"
typeof 1337; // "number"
typeof "foo"; // "string"
typeof {}; // "object"
typeof parseInt; // "function"
typeof Symbol(); // "symbol"
typeof 127n // "bigint"

ts的typeof

let a=5;
typeof a;//number

ts的typeof用于获取未知变量的类型

类型的兼容

let a:number|string;
let b=5;
a=b;

上边的例子 number和string类型包含number类型,所以不会报错