6.typescript练习-自定义错误类型-抛出异常
import { extend } from "jquery"
//映射类型
type Account ={
id:number
isEmployee:boolean
notes:string[]
}
//所有字段都是可选的
type OptionalAccount={
[k in keyof Account]?:Account[k]
}
//所有字段都可以为null
type NullableAccount ={
[k in keyof Account]:Account[k]|null
}
//所有字段都是只读
type ReadonlyAccount={
readonly [k in keyof Account]:Account[k]
}
//所有字段都是可写的
type Account2 ={
-readonly[k in keyof ReadonlyAccount]:Account[k]
}
//所有字段都是必须的
type Account3 ={
[k in keyof OptionalAccount]-?:Account[k]
}
//字段可以标记为可选的(?)或只读的(readonly),也可以把这个约束去掉。
//使用减号(-)运算符(一个特殊的类型运算符,只对映射类型可用)可以把?和readonly撤销,
//分别把字段还原为必须的和可写的。这里新建一个对象类型Account2,与ReadonlyAccount建立映射,
//使用减号(-)运算符把 readonly 修饰符去掉,最终得到的类型等同于Account。
//伴生对象模式
type Currency ={
unit:'EUR'|'GBP'|'JPY'|'USD'
value:number
}
// let Currency={
// DEFAULT:'USD',
// from(value:number,unit = Currency.DEFAULT):Currency{
// return {unit,value}
// }
// }
// import{Currency} from './Currency'
// let amountDue:Currency={
// unit:'JPY',
// value:88238.25
// }
// let otherAmountDue = Currency.from(332,'EUR')
//抛出异常
function ask(){
return prompt('when is your birthday')
}
function parse(birthday:string):Date{
return new Date(birthday)
}
//let date =parse(ask())
//console.info('Date is',date.toISOString())
function isValid(date:Date)
{
return Object.prototype.toString.call(date)==='[object Date]'
&& !Number.isNaN(date.getTime)
}
function parse2(birthday:string):Date|null{
let date = new Date(birthday)
if(!isValid(date)){
return null
}
return date
}
//let date = parse2(ask())
try{
console.info('date is',new Date().toISOString())
}catch(e){
if(e instanceof RangeError)
{
console.error(e.message)
}
else
{
throw e
}
}
//自定义错误类型
class InvaliDateFromateError3 extends RangeError{}
class DateIsInTheFutureError3 extends RangeError{}
function parse3(birthday:string):Date{
let date = new Date(birthday)
if(!isValid(date))
{
throw new InvaliDateFromateError3('enter is a date in th form yyyy/mm/dd')
}
if(date.getTime()>Date.now())
{
throw new DateIsInTheFutureError3('are you a timelord')
}
return date
}
try{
}catch(e){
if(e instanceof InvaliDateFromateError3)
{
console.error(e.message)
}
else if(e instanceof DateIsInTheFutureError3)
{
console.info(e.message)
}
else
{
throw e
}
}
欢迎讨论,相互学习。
cdtxw@foxmail.com
分类:
TypeScript
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)