interface 和 class 的关系
interface MusicInterface{
playmusic():void
}
// implements 实现,用来约束class
class Cellphone implements MusicInterface{
// playmusic(){}
}
定义了约束后,class 必须要满足接口上的所有条件。
如果 Cellphone 类上不写 playMusic 方法,会报错。
// 处理公共的属性和方法
// 不同的类有一些共同的属性和方法,使用继承很难完成,比如汽车类也有播放音乐的功能,你可以这么做:
// 用car类继承cellphone类、找一个car类和cellphone类的父类,父类有播放音乐的方法,他们俩继承这个父类,
// 很显然这两种方法并不合理,实际上implements,问题迎刃而解
interface MusicInterface{
playmusic():void
}
class Car implements MusicInterface{
playmusic(){}
}
class Cellphone implements MusicInterface{
playmusic(){}
}
// 这样 Car 类和 Cellphone 类都约束了播放音乐的功能。
// 再比如,手机还有打电话的功能,就可以这么做,Cellphone 类 implements 两个 interface。
interface CallInterface{
makePhoneCall():void
}
class phone implements MusicInterface,CallInterface{
playmusic(){}
makePhoneCall(){}
}
// interface 来约束 class,只要 class 实现了 interface 规定的属性或方法,就行了,没有继承那么多条条框框,非常灵活。
// 约束构造函数和静态属性
// 使用 implements 只能约束类实例上的属性和方法,要约束构造函数和静态属性,需要这么写。
interface CircleStatic{
new (radius:number):void
pi:number
}
const Cirle:CircleStatic=class Circle{
// static pi:3.14
public radius:number
public constructor(radius:number){
this.radius = radius
}
}
// 枚举
// 数字枚举
enum Direction{
up=6,
down,
left,
right
}
// 数字递增、反向映射
console.log(Direction.down)
console.log(Direction.down)
// 反向映射
// 字符串枚举
enum Direction1{
up="UP",
down="DOWN"
}
const value = 'UP'
if(value === Direction1.up){
console.log("====")
}
// 类型推论
let usename="zhangxing"
// usename=function(){
// }
function printAge(num=18){
console.log(num)
return num
}
// printAge('oo')
function welecom(){
console.log('hello')
}
interface PrintAge{
(num:number):string
}
// const agel:PrintAge=printAge//很显然,定义的类型和 TS 自动推导出的类型冲突,报错:
let arr = [0,1,null,'zx']
// let pets = [new Dog(),new Cat()]
type arrItem=number|string|null
let arr1:arrItem[]=[0,0,1,null,'00']
// js 八种内置类型
let names:string='lin'
let age:number=18
let ishandsome:boolean=true
let u:undefined=undefined
let n:null=null
let obj:object={name:'zx',age:18}
// let big:bigint=100n
let sym:symbol=Symbol('xx')
// ECMAScript 的内置对象
const numst:Array<number>=[1,2,3]
const date:Date=new Date()
const err:Error=new Error('Error')
const reg:RegExp=/abc/
Math.pow(2,9)
// Dom和bom
let body:HTMLElement = document.body
let allDiv:NodeList = document.querySelectorAll('div')
document.addEventListener('click',(e:MouseEvent)=>{
e.preventDefault()
})
// TS 核心库的定义文件
// TypeScript 核心库的定义文件中定义了所有浏览器环境需要用到的类型,并且是预置在 TypeScript 中的。
网友评论