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