2022-03-03
阅读:27
npm install -g typescript
或者
yarn global add typescript
tsc xxx.ts
类型声明
类型声明是TS非常重要的一个特点
通过类型声明可以指定TS中变量(参数、形参)的类型
指定类型后,当为变量赋值时,TS编译器会自动检查值类型是否符合类型声明,符合则赋值,否则报错
简而言之,类型声明给变量设置了类型,使得变量只能存储某种类型的值
语法:
let str: string = '张三'
let num: number = 1
function fun(a: string,b: number):boolean{
return false
}
自动类型判断
类型:
类型 | 例子 | 描述 |
---|---|---|
number | 1,-2,2,45 | 任意数字 |
string | 'hi','hello',ddd |
任意字符串 |
boolean | true、false | 布尔值true或者false |
字面量 | 其本身 | 限制变量的值就是该字面量的值 |
any | * | 任意类型 |
unknown | * | 类型安全的any |
void | 空值(undefined) | 没有值(或者undefined) |
never | 没有值 | 不能是任何值 |
object | {name:'张三',age:20} | 任意的JS对象 |
array | [1,2,3] | 任意的JS数组 |
tuple | [4,5] | 元祖,描述有限的顺序的数组 |
enum | enum Num{a,b} | 枚举 |
两者非常相似,都可以用来描述一个对象或者函数,在写法上存在一定的不同
描述一个对象
interface User{
name: string,
age: number
}
type User = {
name:string,
age: number
}
定义函数
interface SetUser {
(name: string,age: number): void
}
type SetUser = (name: string,age: number):void
继承 & 组合
interface Name {
name: string
}
interface User extends Name {
age: number
}
type Name = {
name: string
}
type User = Name & {age: number}
Type 和interface都支持互相组合
type的主要应用场景在于类型别名以及联合类型和元祖的定义
interface Person {
name: string,
age: number
}
interface Staff {
job: string,
salary: number
}
type People = Person | Staff
type Pair<T> = [T,T]
type PairList = Pair<number>
let list:PairList = [1,2]
function count(x: number | string,y:number):number{
return x as number + y
}
js没有严格意义上的类,ES6的class实现的继承不过也是基于原型链的语法糖。
相比较与es6中的class typescript做了一些扩展
抽象类
抽象方法
接口继承
访问限定符
class Dog {
constructor(name:string){
this.name = name
}
public name:string // public 修饰符 公有成员,对所有人都可见
private changeName(name:string){ // private 修饰符 只能在类的本身调用,不能在类的实例和子类中调用
this.name = name
}
protected age:number = 20; // protected 修饰符 受保护的成员,只能在类本身和子类中访问,不能在实例中访问
readonly color:string = 'black'; // readonly 修饰符 只读属性,必须初始化
static food:string = 'bones'; // 修饰符 静态成员,只能通过类名访问,类的静态成员可以被继承
}