TypeScript 快速入门

  • TypeScript最重要的目的是对 JavaScript 进行静态类型校验(static typechecked),TypeScript 通过支持 JavaScript 所有特性,并在这些特性之上加上一层 TypeScript 类型系统 (TypeScript’s type system) 来实现这一目的

TypeScript 怎么做到的呢,当你给某一变量赋值时,TypeScript 就知道他的类型了

let msg = "Hello World";

此时,TypeScript就知道变量 msgstring 类型

除此之外,TypeScript 还提供了类型声明

interface User {
  name: string;
  id: number;
}

const user: User = {
  name: "Hayes",
  id: 0,
};

约束类型的 interface 可以用在很多地方,比如函数(或方法)的返回值或者参数:

function getAdminUser(): User { // 定义返回值
  //...
}

function deleteUser(user: User) { // 定义参数
  // ...
}

TypeScript 支持 JavaScript 原生的 8 种类型 (Undefined, Null, Boolean, Number, BigInt, String, Symbol, Object) 之外,还扩展了 4 种类型:

  1. any,支持任何类型
  2. unknow,编写程序时不确定什么类型,留给之后去确定
  3. never,表示一个从未出现过的类型
  4. void,用于函数或方法的返回值

TypeScript 可以通过简单类型来构建复杂的类型,这里有两种主要的方式来组合类型:

  • Union:可以声明某个类型是多个给定类型的其中之一
type WindowStates = "open" | "closed" | "minimized";
type LockStates = "locked" | "unlocked";
type OddNumbersUnderTen = 1 | 3 | 5 | 7 | 9;

也可以直接使用

function getLength(obj: string | string[]) {
  return obj.length;
}

结合类型判断,可以根据给定的不同参数类型作出不同的动作

TypePredicate
stringtypeof s === "string"
numbertypeof n === "number"
booleantypeof b === "boolean"
undefinedtypeof undefined === "undefined"
functiontypeof f === "function"
nullnull === null
arrayArray.isArray(a)
function wrapInArray(obj: string | string[]) {
  if (typeof obj === "string") {
    return [obj];
//          ^ = (parameter) obj: string
  } else {
    return obj;
  }
}
  • Generics:范型为类型提供了变量
type StringArray = Array<string>;
type NumberArray = Array<number>;
type ObjectWithNameArray = Array<{ name: string }>;

或者

interface Backpack<Type> {
  add: (obj: Type) => void;
  get: () => Type;
}

// This line is a shortcut to tell TypeScript there is a
// constant called `backpack`, and to not worry about where it came from.
declare const backpack: Backpack<string>;

// object is a string, because we declared it above as the variable part of Backpack.
const object = backpack.get();

// Since the backpack variable is a string, you can't pass a number to the add function.
backpack.add(23);
// => Error: Argument of type 'number' is not assignable to parameter of type 'string'.

TypeScript 拥有“鸭子类型 Duck Type”(走路像鸭子,叫声像鸭子,那么它肯定是一只鸭子)
下面例子中,虽然 point 对象并没有实现 Point 接口,但他和 Point 兼容,所以就将 point 对象确定为 Point 类型

interface Point {
  x: number;
  y: number;
}

function logPoint(p: Point) {
  console.log(`${p.x}, ${p.y}`);
}

// logs "12, 26"
const point = { x: 12, y: 26 };
logPoint(point);

不过 Duck Type 严格来说指的是在 runtime 中动态确定类型,而 TypeScript中 是静态确定类型的

参考:
TypeScript for JavaScript Programmers
Duck typing

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值