TypeScript学习(一)

321 阅读3分钟

一、安装

npm i typescript -g --->全局安装

npm init -y ---创建一个工程初始化一个package.json文件

tsc -h ---> TS查看帮助信息

tsc --init --->创建一个配置项

二、TypeScript的原始类型

注意:

在JavaScript中都有类似的关键字 Boolean、Number、String,后者是 JavaScript 的构造函数,比如我们用 Number 用于数字类型转化或者构造 Number 对象用的,而 TypeScript 中的 number 类型仅仅是表示类型,两者完全不同。

数字

const decLiteral: number = 6

字符串

const book: string = '深入浅出 Typescript'

空值

实际上只有nullundefined可以赋给void

function warnUser(): void {
    alert("This is my warning message");
}
const a: void = undefined

let u: undefined = undefined;
let n: null = null;

symbol

symbol是通过Symbol构造函数创建:

const sym1 = Symbol('key1');
const sym2 = Symbol('key2');

而且 Symbol 的值是唯一不变的:

Symbol('key1') === Symbol('key1') // false

BigInt

使用 BigInt 可以安全地存储和操作大整数,即使这个数已经超出了JavaScript构造函数 Number 能够表示的安全整数范围。

三、TypeScript 中常见的类型

顶部类型:any、unknown

底部类型:never

非原始类型:object

还有常见的数组、元组类型等等。

any

当我们不希望类型检查器对这些值进行检查而是直接让它们通过编译阶段的检查。 那么我们可以使用any类型来标记这些变量:

let notSure: any = 4;
notSure = "maybe a string instead";

unknown

unknownany 的主要区别是 unknown 类型会更加严格:在对unknown类型的值执行大多数操作之前,我们必须进行某种形式的检查,而在对 any 类型的值执行操作之前,我们不必进行任何检查。

注意:

any和unknown两者区别:

(1)any的共同点和 unknown一样,可以是任何类型

(2)unknown与any的不同之处,虽然它们都可以是任何类型,但是当 unknown类型被确定是某个类型之前,它不能被进行任何操作比如实例化、getter、函数执行等等。因此unknown比any更为安全

never

never 类型表示的是那些永不存在的值的类型,never 类型是任何类型的子类型,也可以赋值给任何类型;然而,没有类型是 never 的子类型或可以赋值给 never 类型(除了never本身之外)。

// 抛出异常的函数永远不会有返回值
function error(message: string): never {
    throw new Error(message);
}

// 空数组,而且永远是空的
const empty: never[] = []

数组

两种表示方式:

第一种:

const list: Array<number> = [1, 2, 3]
const listobject:Array<object> = [{id:'1',name:'2442'}]

第二种(使用更为广泛):

const list: number[] = [1, 2, 3]
const listobject: object[] = [{id:1,name:'12254'}]

元组

元组类型与数组类型非常相似,表示一个已知元素数量和类型的数组,各元素的类型不必相同。

元组与数组的不同之处,元组的类型如果多出或者少于规定的类型是会报错的,必须严格跟事先声明的类型一致才不会报错。

let x: [string, number];
x = ['hello', 10]; // OK
x = [10, 'hello']; // Error

可以把元组看成严格版的数组

interface Tuple extends Array<string | number> {
  0: string;
  1: number;
  length: 2;
}

元组继承于数组,但是比数组拥有更严格的类型检查。

Object

object 表示非原始类型,也就是除 number,string,boolean,symbol,null 或 undefined 之外的类型。

// 枚举类型
enum Direction {
    Center = 1
}

let value: object

value = Direction
value = [1]
value = [1, 'hello']
value = {}

我们看到,普通对象、枚举、数组、元组通通都是 object 类型。