2202还不懂Ts?——Ts入门及基础类型

90 阅读3分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第1天

作者:Sean

前言:TypeScript,简称 ts,等于 type + JavaScript,有了 type 的 JavaScript 就像时刻有绿码在手的你(大误)。

ts 可以保证在编译时就检查代码中的类型错误和问题,大大减少了空指针异常等问题,而 JavaScript 只能在运行时发现错误 2022 年了,还不会 ts 你就落伍了!

一、接触 TypeScript

获取 TypeScript

# 安装ts
npm install -g typescript

# 验证ts
tsc -v

# 编译ts文件,生成对应js文件
tsc xxx.ts

二、TypeScript 类型

2.1 JavaScript er 熟知的类型

string, number, boolean, null, undefined, Object, Array, Function, Date......

const str: string = 'a'
const n: number = 1
const flag: boolean = true
const nil: null = null
const undef: undefined: undefined
const date: Date = new Date()
const obj: { name: string } = { name: 'jack' }
const arr: string[] = ['ok', 'success', 'real']
const fn: (a: number) => string = (a: number) => `${x} hhhh`

这些类型对写惯 js 的程序员可能会觉得很熟悉,没有多少门槛,那 ts 只会止步于此吗?

2.2 TypeScript 中新增的类型

tuple, never, unknown, any, enum

tuple 元祖

const tup: [string, number] = ['ok', 2]

[string, number] 代表的就是一个二元组,指的是第一个元素是字符串类型,第二个元素是数字类型的数组,有且只能有两个元素。以此类推,还有三元组,四元组,n 元祖......

never

never类型正如字面意思,永远无法触达的类型,在实际使用中,一个变量如果是 never 类型,则它无法做任何事。后面介绍交叉类型时会再次回顾这个类型。 如果无法使用,那never不是没有用处吗? 当然不是,在做各种类型体操时,never会起到很大的作用,这一点以后会再次介绍。

enum 枚举

enum Staus {
  todo = 0,
  doing,
  done,
}
let status: Status = 0;
status = Status.doing;
console.log(status); // 1

Status 实际表达的是一个{ todo: 0, doing: 1, done: 2 }的枚举 enum的使用场景都有哪些呢?

  • 数字映射
  • 位运算

any 任意

当一个变量为 any 类型,它可以是任何类型(废话) 那岂不是跟 js 一样了? 确实,使用了 any,让你一键还原到 JavaScript

通常,不建议在任何场景使用 any,因为一个变量类型为 any,使用到这个变量的其他变量的类型也会变成 any,一个 any 会生出一窝 any。我们使用 ts 的目的就是类型检查,使用 any 就失去了使用 ts 的意义。

那有些场景我真的不知道该使用什么类型啊

那你可以使用 unknown 啊

unknown 未知

小白:emmmmm,未知是个什么类型???

大佬:你不是不知道你要用的是什么类型吗,所以给你个 unknown 啊

小白:哦。。。哎?不对啊,我这变量声明成 unknown 类型怎么什么也做不了啊

大佬:对啊,声明的时候未知,使用的时候要先缩窄确定成具体类型才能用啊

小白:哦。。。好像懂了,好像也没懂

大佬:没事,后面看到具体例子就知道了

let a: unknown;
a.toFixed(); // 报错,未知类型没有toFixed方法
if (typeof a === 'number') {
  a.toFixed(); // ok, if判断语句已经把a类型收窄成number类型了
}

所以 unknown 也可以称为安全的 any

三、结语

只看这些简单类型,ts 是不是跟 js 很相似呢?只不过是是在声明各种变量时加上类型了。

下一期会介绍稍微高级的 TypeScript 类型,包括联合类型,交叉类型,类型声明等,尽情期待。