函数定义类型和返回值类型不一致(如何定义函数中的返回值和错误)
函数定义类型和返回值类型不一致(如何定义函数中的返回值和错误)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()
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() 方法来获得具体的异常错误原因了。
我是【明哥我来】,坚持输出技术、副业和生活感悟,欢迎关注,一起走向财富自由。