快捷搜索:  汽车  科技

函数定义类型和返回值类型不一致(如何定义函数中的返回值和错误)

函数定义类型和返回值类型不一致(如何定义函数中的返回值和错误)class Either<TLeft TRight> { private readonly value: TLeft | TRight; private readonly left: boolean; // 封装 TLeft 或 TRight 值,并使用一个标志跟踪使用了哪个类型 private constructor(value: TLeft | TRight left: boolean) { this.value = value; this.left = left; } isLeft(): boolean { return this.left; } getLeft(): TLeft { if(!this.isLeft()

函数定义类型和返回值类型不一致(如何定义函数中的返回值和错误)(1)

2022年05月23日 日更 117/ 100 天

01. 我们要写出工业级的代码,就需要好好处理各种错误。什么是工业级的代码,就是稳如磐石,各种异常都有处理。

02. 好好处理各种错误或者异常,那么,编写函数的时候,就要正确地返回值,或者抛出错误、异常。

03.我们看以下的代码

class Either<TLeft TRight> { private readonly value: TLeft | TRight; private readonly left: boolean; // 封装 TLeft 或 TRight 值,并使用一个标志跟踪使用了哪个类型 private constructor(value: TLeft | TRight left: boolean) { this.value = value; this.left = left; } isLeft(): boolean { return this.left; } getLeft(): TLeft { if(!this.isLeft()) throw new Error(); return <TLeft>this.value; } isRight(): boolean { return !this.left; } getRight(): TRight { if(!this.isRight()) throw new Error(); return <TRight>this.value; } static makeLeft<TLeft TRight>(value: TLeft) { return new Either<TLeft TRight>(value true); } static makeRight<TLeft TRight>(value: TRight) { return new Either<TLeft TRight>(value false); } } enum InputError { NoInput Invalid } type Result = Either<InputError DayofWeek>; function parseDayOfWeek(input:string):Result { if(input == "") { return Either.makeLeft(InputError.NoInput); } switch(input.toLowerCase()) { case "sunday": return Either.makeRight(DayOfWeek.Sunday); case "monday": return Either.makeRight(DayOfWeek.Monday); case "tuesday": return Either.makeRight(DayOfWeek.Tuesday); case "wednesday": return Either.makeRight(DayOfWeek.Wednesday); case "thursday": return Either.makeRight(DayOfWeek.Thursday); case "friday": return Either.makeRight(DayOfWeek.Friday); case "saturday": return Either.makeRight(DayOfWeek.Saturday); default: return Either.makeLeft(InputError.Invalid); } }

04. 当我们调用parseDayOfWeek() 函数时,通过使用返回值中的getRight() 方法来取得值,如果返回值是有错误的时候,我们会得到一个异常,所以调用 getRight() 方法的时候,需要在外面套一层 try...catch 来捕获异常,捕获异常的结构体中,我们就可以使用 getLeft() 方法来获得具体的异常错误原因了。


我是【明哥我来】,坚持输出技术、副业和生活感悟,欢迎关注,一起走向财富自由。



猜您喜欢: