Typescript 从入门到放弃系列(三)-类型推导

191 阅读1分钟

一.类型推导

  • 声明变量没有赋予值时默认变量是any类型
let name; // 类型为any
name = "james";
name = 18;
  • 声明变量赋值时则以赋值类型为准
let name = "james"; // name被推导为字符串类型
name = 18;

二.包装对象

我们在使用基本数据类型时,调用基本数据类型上的方法,默认会将原始数据类型包装成对象类型

let bool1: boolean = true;
let bool2: boolean = Boolean(1);
let bool3: Boolean = new Boolean(2);

boolean是基本数据类型 , Boolean是他的封装类

#三.联合类型

在使用联合类型时,没有赋值只能访问联合类型中共有的方法和属性

let name: string | number; // 联合类型
console.log(name!.toString()); // 公共方法
name = 10;
console.log(name!.toFixed(2)); // number方法
name = "zf";
console.log(name!.toLowerCase()); // 字符串方法

这里的!表示此值非空

let ele: HTMLElement | null = document.getElementById("#app");
ele!.style.color = "red"; // 断定ele元素一定有值

四.类型断言

  • 类型断言
let name: string | number;
(name! as number).toFixed(2); // 强制
(<number>name!).toFixed(2);

尽量使用第一种类型断言因为在 react 中第二种方式会被认为是jsx语法

  • 双重断言
let name: string | boolean;
(name! as any) as string;

尽量不要使用双重断言,会破坏原有类型关系,断言为 any 是因为 any 类型可以被赋值给其他类型

五.字面量类型

type Direction = "Up" | "Down" | "Left" | "Right";
let direction: Direction = "Down";

可以用字面量当做类型,同时也表明只能采用这几个值(限定值)。类似枚举。