Typescript学习 类型守卫

in 关键字
interface Admin {
    name: string
    privileges: string[]
}

interface Employee {
    name: string
    startDate: Date
}

type UnKnownEmployee = Employee | Admin

function printEmployeeInformation(emp: UnKnownEmployee) {
    console.log("Name: " + emp.name)
    if ("privileges" in emp) {
        console.log("Privileges:" + emp.privileges.join("、"))
    }
    if ("startDate" in emp) {
        console.log("Start Date:" + emp.startDate)
    }
}

const params: Admin = {
    name: "amin",
    privileges: ["张龙"]
}

const params2: Employee = {
    name: "amin",
    startDate: new Date()
}

printEmployeeInformation(params)
printEmployeeInformation(params2)
typeof

typeof v === "typename" // string number boolean symbol

function testTypeof(value: string, type: string | number) {
    if (["number", "string"].includes(typeof type)) {
        console.log(typeof type)
        if (typeof type === "number") {
            return new Array(type + 1).join("-") + value
        }
        return type + value
    }
    console.log("err")
}
instanceof

console.log(padder instanceof SpaceRepeatingPadder) // true false

interface Padder {
    getPaddingString(): string
}

class SpaceRepeatingPadder implements Padder {
    constructor(private numSpaces: number) {}
    getPaddingString(): string {
        return Array(this.numSpaces + 1).join("-")
    }
}

class StringPadder implements Padder{
    constructor(private value: string) {}
    getPaddingString(): string {
        return this.value
    }
}

let padder: Padder = new SpaceRepeatingPadder(6)
let padder2: Padder = new StringPadder("amin")

if (padder instanceof SpaceRepeatingPadder) {
    console.log(padder.getPaddingString())
}

if (padder2 instanceof StringPadder) {
    console.log(padder2.getPaddingString())
}
自定义类型保护的类型谓词
function isNumber(x: any): x is number {
    return typeof x === "number"
}

function isString(x: any): x is string {
    return typeof x === "string"
}

console.log(isNumber("amin")) // false
console.log(isNumber(5)) // true
console.log(isString(5)) // false
console.log(isString("amin")) // true
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值