programing

TypeScript에서 캐치 및 마지막으로 스테이트먼트를 시도하는 방법은 무엇입니까?

css3 2023. 3. 1. 11:23

TypeScript에서 캐치 및 마지막으로 스테이트먼트를 시도하는 방법은 무엇입니까?

프로젝트에 오류가 있어 시도캐치, 그리고 마지막으로 이 문제를 해결해야 합니다.

JavaScript에서는 사용할 수 있지만 Typescript에서는 사용할 수 없습니다.

타이프스크립트 캐치스테이트먼트에 Exception을 인수로 넣었을 때, 왜 받아 들이지 않는 것입니까?

여기 암호가 있습니다.

private handling(argument: string): string {
    try {
        result= this.markLibrary(argument);
    }
    catch(e:Exception){
        result = e.Message;
    }
    return result;
}

여기에 예외 메시지가 필요한데 받을 수 없습니다.그리고 아래 오류가 발생했습니다.

catch 절 변수에는 형식 주석을 사용할 수 없습니다.

편집

Typescript 4.0에는 다음 기능을 지정할 수 있는 기능이 추가되었습니다.unknown그리고.any어획 변수(이슈) 그리고 타이프스크립트 4.4는 다음을 만들 수 있는 기능을 추가했습니다.unknown캐치 변수(PR)의 디폴트 설정useUnknownInCatchVariables 플래그를 설정합니다.

이 플래그를 사용하여 다음 작업을 수행할 수 있습니다.

catch(e){
    result = e.message; // error under useUnknownInCatchVariables 
    if (typeof e === "string") {
        e.toUpperCase() // works, `e` narrowed to string
    } else if (e instanceof Error) {
        e.message // works, `e` narrowed to Error
    }
}

캐치 변수에 대한 임의 유형 지정은 여전히 지원되지 않습니다.

원답

유형 스크립트는 캐치 변수에 대한 주석을 지원하지 않습니다.이를 허용하는 제안이 있지만 아직 논의 중입니다(여기를 참조).

유일한 해결책은 유형 어설션 또는 추가 변수를 사용하는 것입니다.

catch(_e){
    let e:Error= _e;
    result = e.message;
}

catch(e){
    result = (e as Error).message;
}

안타깝게도 이 작업도 수행되며 완전히 선택 해제됩니다.

catch(e){
    result = e.MessageUps;
}

메모

제안서에 대한 토론에서 읽을 수 있듯이 JS에서 던져지는 모든 것이 반드시 다음 항목이어야 하는 것은 아닙니다.Error예를 들면, 이 가정에 주의해 주세요.

에 의해 tslinted는no-unsafe-any이걸 잡는 데 도움이 될 거야

TypeScript 4.0에서는unknowncatch 구 변수 유형으로 지정:

unknown보다 안전하다any값을 조작하기 전에 일종의 활자 분석을 수행해야 한다는 것을 상기시켜주기 때문입니다.(표준)

try {  /* ... */ }
catch (e: unknown) { // <-- note `e` has explicit `unknown` type
    e.message // errors
    if (typeof e === "string") {
        e.toUpperCase() // works, `e` narrowed to string
    } else if (e instanceof Error) {
        e.message // works, `e` narrowed to Error
    }
    // ... handle other error types 
}

놀이터.

업데이트: TypeScript 4.4에는 catch-variable을 기본값으로 type으로 설정하는 설정 플래그가 있습니다.unknown또, 이 기능은, 에서는 자동적으로 유효하게 됩니다.--strict플래그를 설정합니다.

첫 번째로 다음 명령어를 정의해야 합니다.result변수

let result;

둘째, 메시지처럼 e의 유형을 정의할 수 없기 때문에 e의 종류를 강제하고 싶은 경우에는 를 사용합니다.

catch(e){
    result = (e as Exception).Message;
}

또는

catch(e){
    result = (<Exception>e).Message;
}

그렇지 않으면 e는 다음과 같은 유형을 가지기 때문에 계속 작동합니다.any

catch (e) {
    result = e.Message;
}

시험해 볼 수 있다

try {...}
catch (e) {
    console.log((e as Error).message);
}

또한.anytype도 동작합니다.

try {...}
    catch (e:any) {
        console.log(e.message);
    }

그렇지만instanceof에러를 던지다

try {...}
    catch (e) {
        console.log((e instanceof Error).message);
    }

제 경우엔 이런 식으로 작동합니다.단말기에 인쇄하려면:

    catch(error){
      log('any_text', error as Error);
}

또는 metod를 호출합니다.

    catch(error){
       anything_here((error as Error).message),
}

간단한 답변

catch (e) {
  const error = e as <Your custom error type>;
  ...
}

언급URL : https://stackoverflow.com/questions/54649465/how-to-do-try-catch-and-finally-statements-in-typescript