首页 > 其他分享 >typeScript学习-类型断言、类型转换

typeScript学习-类型断言、类型转换

时间:2023-08-22 16:36:07浏览次数:73  
标签:类型转换 typeScript 断言 brand days number let public string

typeScript学习

类型断言、类型转换

1、类型断言:

语法格式:A 数据类型的变量 as B 数据类型。

let b: B

let c: C = b as C

理解:是绕过TS 编译检查,类型断言就是对编译器说:我是这个类型了,无需检查。

2、类型断言使用场景

export class Vechile {
    static count: number = 3
    public brand: string // 品牌
    public vechileNo: string // 车牌号
    public days: number // 租赁天数
    public total: number = 0 // 支付的租赁总费用
    constructor(brand_: string, vechileNo_: string, days_: number) {
        this.brand = brand_
        this.vechileNo = vechileNo_
        this.days = days_
    }
    public calculateRent() {
        console.log(this.brand + " 车牌号:" + this.vechileNo + "开始被租")
        return 0
    }
}

class Car extends Vechile {
    public type: string // 车的型号
    public brand: string = "Car品牌" // 品牌
    constructor(brand_: string, vechileNo_: string, days_: number, type_: string) {
        super(brand_, vechileNo_, days_)
        this.type = type_
    }
    // 根据车的型号来获取租用一天该型号车的租金
    public getPriceBytype() {
        let rentMoneyByDay: number = 0 // 每天的租金
        if (this.type === "普拉多巡洋舰") {
            rentMoneyByDay = 800
        } else if (this.type === "凯美瑞旗舰版") {
            rentMoneyByDay = 400
        } else if (this.type === "威驰智行版") {
            rentMoneyByDay = 200
        }
        return rentMoneyByDay
    }

    public calculateRent() {
        super.calculateRent()
        console.log("小轿车租赁...")
        return this.days * this.getPriceBytype()
    }
}


class Bus extends Vechile {
    public seatNum: number // 座位数
    constructor(brand_: string, vechileNo_: string, days_: number, seatNum_: number) {
        super(brand_, vechileNo_, days_)
        this.seatNum = seatNum_
    }

    public getPriceBySeatNum() {
        // 计算租赁价格
        let rentMoneyByDay: number = 0 // 每天的租金
        if (this.seatNum <= 16) {
            rentMoneyByDay = 800
        } else {
            rentMoneyByDay = 1600
        }
        return rentMoneyByDay
    }

    public calculateRent() {
        super.calculateRent()
        return this.days + this.getPriceBySeatNum()
    }
}

class Truck extends Vechile {
    ton!: number // 载量
    constructor(brand_: string, vechileNo_: string, days_: number, ton_: number) {
        super(brand_, vechileNo_, days_)
        this.ton = ton_
    }
    CalRentPrice() {
        // 计算租赁价格
        let rentMoneyByDay: number = 0 // 每天的租金
        if (this.ton <= 500) {
            // 500吨
            rentMoneyByDay = 750
        } else if (this.ton > 500) {
            rentMoneyByDay = 1350
        }
        return rentMoneyByDay
    }
    public calRent() {
        return this.CalRentPrice() * this.days
    }
}

class Customer {
    rent(vechile: Vechile) {
        // if (vechile instanceof Car) {
        let car = vechile as Car
        console.log("car.type:", car.type)
        return car.calculateRent()
        // }
    }
}

let cust: Customer = new Customer()
let vechile: Vechile = new Car("AA", "abc", 30, "普拉多巡洋舰")
// 类型断言
// let car: Car = vechile as Car
// 类型转换
let car: Car = <Car>vechile
console.log(car.calculateRent()) // 24000
vechile = new Truck("AA", "abc", 1, 300)

let truck: Truck = vechile as Truck
console.log(truck.calRent()) // 750


export { }

 

let symid = Symbol("userid")
let user = { [symid]: 101, username: "wangwu", age: 25 }
let name1 = "username"
let userid = user[symid]
// let username = user[name1] // 错误
let username = user[name1 as any]
test({ username: 'wangwu', age: 25 })
function test(data: unknown) { }
console.log("username:", username)
export { }

3、类型转换——编译器强制一个类型转换成另一个类型。

 

标签:类型转换,typeScript,断言,brand,days,number,let,public,string
From: https://www.cnblogs.com/kongbaige/p/17648631.html

相关文章

  • TypeScript使用技巧
    文章目录使用技巧TypeScript内置的工具类型keyofextends限定泛型interface与type区别TypeScript作为JavaScript的超集,通过提供静态类型系统和对ES6+新特性的支持,使JavaScript开发变得更加高效和可维护。掌握TypeScript的使用技巧,可以帮助我们更好地开发和组织JavaScript项......
  • 采用typescript编写,实现ofd前端预览、验章。
    前言 浏览器内核已支持pdf文件的渲染,这极大的方便了pdf文件的阅读和推广。ofd文件作为国产板式标准,急需一套在浏览器中渲染方案。本人研究ofd多年,分别采用qt、c#开发了ofd阅读器。本人非前端开发人员,对js、typescript并不熟悉,所以对开发web版阅读器迟迟没有下手。但是,本人......
  • [React Typescript] React namespace
    export=React;exportasnamespaceReact;declarenamespaceReact{////ReactElements//----------------------------------------------------------------------typeElementType<P=any>={[KinkeyofJSX.I......
  • [React Typescript] Inferring Type Arguments in Curried Hooks
    import{DependencyList,useMemo,useState}from"react";import{Equal,Expect}from"../helpers/type-utils";constuseCustomState=<TValue>(initial:TValue)=>{const[value,set]=useState<TValue>(initial);......
  • [React Typescript] Function overload in React hook
    import{useState}from"react";import{Equal,Expect}from"../helpers/type-utils";typeUseStateReturnValue<T>={value:T;set:React.Dispatch<React.SetStateAction<T>>;};exportfunctionuseStateAsObjec......
  • 类型转换
    类型转换1.java是强类型语言,所以进行运算时候,需要类型转换低——————————————>高byte,short,char—>int—>long—>float—>double强制转换(类型)变量名高—>低自动转换低—>高注意点:不能对布尔值进行转换不能把对象类型转换成不相干的类型高转低的时......
  • Airtest1.2.7新增的14个断言API解析
    以下基于python3.8;airtestIDE1.2.14;airtest1.2.7;pocoui1.0.87Airtest1.2.7新增了14个断言API,使得断言更多丰富,之前就有的4个断言:assert_exists、assert_not_exists、assert_equal、assert_not_equal,详细可以看:AirtestAPI精讲之断言,这里就不再过多介绍。之前想断言一个变量是......
  • 2-14-Gateway网关-路由断言工厂[15-Gateway网关-路由的过滤器配置]
    所谓的断言工厂与过滤器都是通过yml配置生效以下都将从配置的角度说明如何配置具体哪一个怎么用可以直接访问spring官网查看spring:cloud:gateway:routes:-id:user-serviceuri:lb://userservicepredicates:-Path=/us......
  • Deno 中使用 @typescript/vfs 生成 DTS 文件
    背景前段时间开源的STC工具,这是一个将OpenApi规范的Swagger/Apifox文档转换成代码的工具。可以在上一篇(《OpenApi(Swagger)快速转换成TypeScript代码-STC》)随笔里面查看这个工具的介绍和使用。为了支持生成Javascript,近期添加了JavaScript插件,并且生成DTS文件。实......
  • python+playwright 学习-71 expect 断言设置timeout 超时和自定义错误内容
    前言playwright提供了一个expect方法用于断言,还可以设置超时时间。expect使用断言描述expect(locator).to_be_checked()Checkboxischeckedexpect(locator).to_be_disabled()Elementisdisabledexpect(locator).to_be_editable()Elementisenabled......