npm i -g typescript安装 tsc-v检测是否安装成功
npm i -g ts-node 使用方法:node-ts 文件名
数组类型
let num:number[ ]=[1,2,3]
let num:(number|string)[ ]=[1,2,3,'a'] 联合类型
类型别名
type current=(number|string)[ ]
let num:current=[1,2,3,'a']
函数类型
function fun(num1:number,num2:number):number{
return num1+num2
}
const fun=(num1:number,num2:number):number=>{
return num1+num2
}
或者const fun=(num1:number,num2:number)=>number=(num1,num2)=>{
return num1+num2
}
可选参数:num1?num2?只能放在最后面。
对象类型
let person:{name:string;age:number;sayHi(name:string):void}={//换行不要加分号
name:'jack',
age:18,
sayHi(name){}
}
对象接口
interface person{
name:string
age:number
sayHi()void
}
let per:person={
name:'jack',
age:10,
sayHi(){}
}
接口只能为对象指定类型,类型别名可以为任意类型指定别名,加等于号
type person={
name:string
age:number
sayHi()void
}
接口继承
interface point2d {x:number;y:number}
interface point3d extends point2d {z:number}
元组
let position:[number,number]=[12,23]
声明变量并立即初始化值,函数返回值,可以省略类型注解
let age=18
技巧:在浏览器控制台,通过console.dir()打印DOM元素,在属性列表的最后面,即可看到该元素的类型。获取a标签的href属性
const alink=document.getElementById('link') as HTMLAnchorElement
字面量类型
function vhangeDirection(direct:'up'|'down'){}
changeDirection('up或者down')
枚举类型
enum Direction {up,down}//enum Direction {up=1,down}自增//enum Direction {up='up',down='down'}字符串枚举一定要赋值
function changedirection(direction:Direction){}
changedirection(Direction.up)
枚举成员都有值
ts中typeof可以在类型上下文引用变量或属性的类型
let p={x:1,y:2}//point是一个对象
function formatpoint(point: typeof p) {}=function formatpoint(point: {x:number;y:number}) {}
formatpoint({x:1,y:100})
typescript高级类型
class类
class person{
age:number
gender='男'
构造函数
class person{
age:number
gender:string
constructor(age:number,gender:string){
this.age=age
this.gender=gender
}//构造函数不需要返回值
}
实例方法
class point{
x=10
y=20
scale(n:number):void{
this.x*=n
this.y*=n
}
}
}//类型推断
继承
class animal{
move(){console.log('move')}
}
class dog extends animal{
bark(){console.log('a')}
}
const d=new dog()
实例对象d具有父类animal和子类dog所有属性和方法
实现接口
interface singable{
sing():void
}
class person implements singable{
sing(){console.log('aaaa')}
}//person类中必须提高接口指定的所有方法和属性
protected:只能在其声明类和子类可见,任何实例对象都不可见
private:表示私有的,只在当前类可见,实例对象以及子类都是不可见的
readonly:用来表示只读,构造函数以外不能对属性赋值//只能修饰属性,不能修饰方法
对象类型兼容:
class Point { x: number; y: number }
class Point3D { x: number; y: number; Z: number }
const p: Point= new Point3D( )
少 多
对于函数的兼容
type F1 = ( a: number )=> void
type F2 = ( a: number, b: number) => void
let f1: F1
let f2:F2=f1
多 少
交叉类型
interface Person {name: string }
interface Contact { phone: string }
type PersonDetail = Person & Contact
let obj: PersonDetail = {
name :' jack',
phone:'133.'
}
泛型
function id <Type>(value:Type):Type{return value}
let num:number
let num=id<number>(10)
泛型约束
interface ILength{length:number}
function id<Type extends ILength>(value:Type):Type{
console.log(value.length)
return value
}
TS中有两种文件类型: 1 .ts文件2 .d.ts 文件。
.ts文件:
1.既包含类型信息又可执行代码。
2.可以被编译为.js 文件,然后执行代码。
3. 用途:编写程序代码的地方。
.d.ts文件:
1. 只包含类型信息的类型声明文件。
2.不会生成.js 文件,仅用于提供类型信息。
3. 用途:为JS提供类型信息。