typescript学习总结 | 青训营笔记

188 阅读2分钟

这是我参与「第四届青训营」笔记创作活动的第8天

前言

typescript是通过在JavaScript的基础上添加静态类型定义构建而成。TypeScript通过TypeScript编译器或Babel转译为JavaScript代码,可运行在任何浏览器,任何操作系统。静态类型可读性增强,可维护性增强。可以提前感知大部分错误,适合多人的大项目。

基本语法

const a:string = 'string'
const w:number = 1;
const e:boolean = true 
const r:null = null
const t:undefined = undefined

基本语法声明变量在js中是不许要定义类型的,ts中对类型做了明确的定义,如果是一个未知类型可以使用any来代替,或者泛型编程中使用T等字符代替。

对象类型

interface IBanner{
readonly id:number;
name:string;
}
const BannerInstance : IBanner={
id:1,
name:'banner1'
}

对象类型中如果只是定义模型或者数据之类的可以使用interface对数据结构进行定义,然后ts会自动限制里面的字段,方便我们开发的时候知道我们到底在做什么。

函数

function add(x:number,y:number):number{
   return x+y
}

ts中函数可以指定返回值的类型语法为function name(...params):return Type

函数重载

函数重载指的是,函数名称相同,但是参数的个数或者类型不同。

function add(num1: number, num2: number): number; 
function add(num1: string, num2: string): string;

数组

type StudentList = Array<Student>
const studentArray:StudentList = []

使用type可以自定义类型,方便我们抽象更高级的变量。

泛型

interface IX<T,U>{
    key:T;
    val:U
}
class IMan<T>{
    instance:T;
}
type ITypeArr<T> = Array<T>

泛型能开发出更加通用的代码,让我们工程效率更高。

联合类型

联合类型代表一个变量可能是多个类型的时候才使用。

interface User {
  message: string | number
}

交叉类型

interface Dog{ run():void }
interface Cat{ jump():void } 
let pet:Dog & Cat={ run(){}, jump(){} }

将多个类型合并成一个类型,新的类型将具有所有类型的特性,所以交叉类型特别适用对象混入的场景。

工程应用

tsconfig可以配置我们ts的编译目录输出目录语法版本等,tsnode是用来直接运行我们的ts文件。可以使用tsc单独编译文件,最终会输出js文件。

总结

学习了typescript虽然不能像JavaScript那样随心所欲的定义类型了,但是从长远考虑,ts的这种类型和高级的功能比如interface能支持更大的工程,和模块化。