클래스에 대한 인수 중 하나에 대해 문자열이나 오류를 허용하고 유형을 확인하기 위해 인라인 조건부를 사용할 때 유형 가드가 있도록하고 싶습니다.인라인 조건부 유형 가드
아래의 세 가지 예에서 알 수 있듯이 인라인 조건부 형식에 대한 유형 가드가 지원되지 않는 것 같습니다. 마지막 단 하나만 컴파일됩니다. 이 더있다 : 어떤 이유로 documentation
UPDATE에서 "인라인"라고합니다/다른 블록, 만약 내가 "인라인 조건문"을 말할 때, 나는 형태 (<boolean statement>)? a : b
의 의미
, 여러 줄하지 제대로
export class MyError extends Error {
public code; name; message
constructor(code: number = -1, name: string = '', err?: Error | string) {
super()
this.name = name
this.code = code
// no type guards
this.message = this.name + (err)? ": " + (err instanceof Error)? err.message : err : ''
}
}
export class MyError2 extends Error {
public code; name; message
constructor(code: number = -1, name: string = '', err?: Error | string) {
super()
this.name = name
this.code = code
if(err) {
// no type guards
this.message = this.name + ": " + (err instanceof Error)? err.message : err
} else {
this.message = this.name
}
}
}
export class MyError3 extends Error {
public code; name; message
constructor(code: number = -1, name: string = '', err?: Error | string) {
super()
this.name = name
this.code = code
// type guards... but at what cost to brevity
this.message = this.name
if(err) {
if(err instanceof Error) {
this.message += ": " + err.message
} else {
this.message += ": " + err
}
}
}
}
여부'와'err'은 받아 들일 것입니다 에러 객체 또는 에러 메시지를 출력 할 때,'this.message = \'$ {this.name} '라고 쓰면된다 : $ {err.message || err} \';'. 또한. 당신의 타입이'잘못 되었나요? Error : string'? ** String! == string ** –
Rajesh
err.message
을 평가합니다 : 예를 들면 다음과 같습니다의나는 그것을 좋아한다. 유일한 것은 'err'이 정의되지 않은 경우 ":"가 없어야한다는 것입니다. 그래서 아마 타입을'Error | 문자열 | null', strictNullChecks가 사용 가능하다고 가정하십시오. 업데이트 된 문자열 경우, 건배. –