后端的React之路(五)

48 阅读2分钟

开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情

前言

今天继续来学习在平常开发中,经常会用到的TS语法特性

迭代方法

在TS中Array、Map、Set、String等数据类型都是可以被迭代的,通常使用for...infor...of语句来进行操作,一个负责迭代key一个负责迭代value。下面来看看例子代码:

let list = ["A","B","C"]


// 遍历键
for(let key in list) {
    console.log(key); // 0 1 2
}

for(let value of list) {
    console.log(value);// A B C
}

只要一个类型是实现了Symbol.iterator属性,他都是可以被迭代的。

导出和导入

在ES6中引入了模块的概念,在TS中同样也有其概念,我们使用export和import关键字对文件中的变量、函数、类等进行导出和导入。

基本用法

简单例子如下:

// Service.ts
export interface StandardService {
    todo()
}

// ServiceImpl.ts
import {StandardService} from "./Service";

class ServiceImpl implements StandardService{
    todo() {
    }
}

as重命名

在进行导出导入时,我们同样可以使用as来进行重命名,例如下面的代码

// 导出时重命名

// Service.ts
const aName:string = "Name"
export { aName as bName }

// ServiceImpl.ts
import {bName} from "./Service";
// 导入时重命名
// Service.ts
const aName:string = "Name"
export { aName}

// ServiceImpl.ts
import {aName as bName} from "./Service";

default

每个模块都可以有一个默认的default导出语句,使用这种方式导出的类型,再导入时可以随意指定名字

export default {xxx,xxx,,xxx}

*整体导入

TS提供了通配符*来进行模块的整体变量导入

import * from './XXXX'

any、void、never类型

any类型

由于TS本质上还是会编译成JS,因此当我们不声明变量类型同时不赋值的情况下,变量的类型就为any,它能够被赋值为任何类型,类似于Java中的Object类型。当类型为any时,就取消了类型的限制,会失去TS语言本身静态类型的优势。

let obj: any = 1

obj = "100"

void类型

void是表示没有任何类型,通常我们就是用在函数的返回值上,当变量被声明为void类型时,只能被赋值为undefined或者null

function hello(): void {
    // TODO
}

never类型

never类型比较少见,他表示永远不会有值得一种类型,一般我们会用在总是抛出异常得方法上,因为这些方法总是不会返回值

function error(message: string): never {
    throw new Error(message);
}

学习资料