这是我参与「第四届青训营」笔记创作活动的第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能支持更大的工程,和模块化。