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
    }
}
posted @ 2024-03-28 08:03  txwtech  阅读(96)  评论(0编辑  收藏  举报