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