联合类型|类型断言|交叉类型
- 联合类型 "|"
let phone:number | string=155236585
phone=16126126
phone="023-15151"
let fn = function(type:number | boolean):boolean{
return !!type
}
- 类型断言 "as"
let fn=function (num:number | string):void{
console.log((num as string).length)
}
fn("5555")
interface A{
aa:string
}
interface B{
bb:string
}
let fnn=(type: A | B ):void=>{
console.log(<A>type.aa)
}
- 交叉类型 "&"
interface Peple{
name:string
age:number
}
interface Man{
sex:number
}
const XX=(man:peple & man):viod=>{
console.log(man)
}
内置对象
let num:Number=new Number(55)
let boolean:Boolean=new Boolean(false)
.....
let div=documnet.querSelector('.header')
let loc:Storage=localStorage
let l:Locatiuon=loaction
let promise:Promise<number>=new Promise(r=>r())
let ck:string=document.cookie
class
- class 的基本用法
interface Vnode {
tag: string
text?: string
children?: Vnode[]
}
class DOM {
createdElement(el: string) {
return document.createElement(el)
}
setText(el: HTMLElement, text: string | null) {
el.textContent = text
}
render(data: Vnode) {
let root = this.createdElement(data.tag)
if (data.children && Array.isArray(data.children)) {
data.children.forEach(item => {
let child = this.render(item)
root.appendChild(child)
})
} else {
this.setText(root, data.text)
}
return root
}
}
import { text } from "stream/consumers";
interface Options {
el: string | HTMLElement;
}
interface VueClass {
options: Options
init(): void
}
class Vue extends DOM implements VueClass {
options: Options;
constructor(options: Options) {
super()
this.options = options
}
init(): void {
let data: Vnode = {
tag: "div",
text: "父元素",
children: [
{
tag: "span",
text: "子元素001"
}, {
tag: "span",
text: "子元素002"
}
]
}
let app = typeof this.options.el === "string" ? document.querySelector(this.options.el) : this.options.el
app.appendChild(this.render(data))
}
}
new Vue({
el: "#app"
})
- 修饰符
- super() 的原理
super()
super.父类的方法()
- 静态方法
static add():void{}
- get set
class Ref(){
_value:any
constructor(value:any){
this._value=value
}
get value(){
return value + "获取"
}
set value(){
this._value=value + "设置"
}
}
抽象类
- 基类,抽象类
abstract class Vue{
name:string
constructor(name?:string){
this.name=name
}
getName():string{
return this.name
}
abstract init(name:string):void
}
class Nvue extends Vue{
constructor(){}
init(name:string):void{
return "init"
}
}
元组类型
- 元组,就是数组的变种(数量固定)
let arr:=[1,false]
let arr1:[number,false]=[5,true]
let arr2:readonly [number,false]=[87878,true]
let arr3:readonly [x:number,y?:false]=[87878,true]
枚举类型
- 数字枚举
enum Color{
red,
green,
bule
}
console.log(Color.red);
console.log(Color.green);
console.log(Color.bule);
enum Color{
red = 2,
green,
bule
}
console.log(Color.red);
console.log(Color.green);
console.log(Color.bule);
- 字符串枚举
enum Color{
red = "red",
}
console.log(Color.red);
- 异构枚举 (混合使用)
- 接口枚举
- const枚举
- 反向映射
类型推论 | 类型别名
- 类型别名
type S = string
let str:S = "6666"
type T = string | number & null
type num = 1 extends number ? 1 : 0
never类型
type A = string & number
function A():never{
throw new Error('error')
}
function B():never{
while(true){}
}