开启掘金成长之旅!这是我参与「掘金日新计划 · 12 月更文挑战」的第6天,点击查看活动详情
前言
今天继续来学习在平常开发中,经常会用到的TS语法特性
迭代方法
在TS中Array、Map、Set、String等数据类型都是可以被迭代的,通常使用for...in和for...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);
}