인라인에서 null 값을 확인하고 타이프스크립트에서 오류를 던지는 방법은?
C#에서 null 참조를 확인하기 위해 코드를 작성할 수 있으며 사용자 지정 예외를 입력하는 경우 예:
var myValue = (someObject?.SomeProperty ?? throw new Exception("...")).SomeProperty;
최근 업데이트에서 TypeScript는 null 병합 연산자를 소개했습니다?? 그러나 위 문구와 같이 사용하면 컴파일 오류가 발생합니다. TypeScript에 비슷한 허용 구문이 있습니까?
명확하게 설명하자면, 원하는 동작은 다음과 같은 코드로 달성된다:
if(someObject?.someProperty == null) {
throw new Error("...");
}
var myValue = someObject.someProperty.someProperty;
코드:
var myValue = someObject?.someProperty.someProperty;
논리적으로는 괜찮지만 덜 의미 있는 예외를 던집니다.
구문 오류의 이유는 문이므로 연산자에게 피연산자로 사용할 수 없기 때문입니다.
현재 2단계에 있는 TC39 프로세스를 통해 작동 중입니다. 스테이지 3에 도달하면 이후 곧 TypeScript에 나타날 것으로 예상할 수 있다. (2020년 말 업데이트: 하지만 TC39 회원이 자신들이 2020년 말에 아직 스테이지 1이라고 생각하지 않았기 때문에 교착 상태에 빠진 것으로 보인다.)
식을 사용하여 다음과 같이 쓸 수 있습니다(의 값을 원하는 경우):
const myValue = someObject?.someProperty ?? throw new Error("custom error here");
원하는 경우(C# 버전이 그렇게 생각합니다):
const myValue = (someObject?.someProperty ?? throw new Error("custom error here")).someProperty;
지금 사용할 수 있는 게 있어요. Babel's REPL에서.
사이드 노트: 오류를 던지고 싶다고 하셨지만, 사용자 정의 오류가 필요 없는 이 글을 읽는 다른 사람들을 위해:
원하는 경우 /이면 오류가 없지만 /이면 오류가 발생하면 다음 작업을 수행할 수 있습니다:
const myValue = someObject?.someProperty.someProperty;
다음과 같이 하십시오:
- if 또는 if 가 값을 얻을 것이다
- is not, but is or 가 있으면 첫번째 이후에 사용하지 않아서 오류가 발생합니다.
- 와 가 둘 다 아니면 을 검색한 결과를 얻을 것입니다.
TypeScript가 이것을 네이티브로 지원하지 않는 한, 당신은 이것과 비슷한 함수를 쓸 수 있다:
function throwExpression(errorMessage: string): never {
throw new Error(errorMessage);
}
그러면 식으로 오류를 던질 수 있게 됩니다:
const myString = nullableVariable ?? throwExpression("nullableVariable is null or undefined")
한 줄 안에 오류를 던지고 싶다면 즉시 호출된 함수 표현식으로 나타낼 수 있습니다:
const test = null ?? (() => {throw new Error("Test is nullish")})();
파티에 좀 늦었지만, 아마 이게 네가 원하는 거겠지. 파일에 집어넣었어요:
export function ensuredDefined<T>(item: T | undefined, message?: string): T {
if (item === undefined) {
throw new Error(message ?? 'item is undefined');
}
return item;
}
완전 공개 아직 테스트 안 했는데 이게 네가 원하는 거 같아.
그래서 대신에
const color = unusedColors.shift();
if (color === undefined) {
throw new Error(...);
}
player.color = color;
있습니다
player.color = ensuredDefined(unusedColors.shift());
그 말은 네가 글을 쓸 수 있다는 뜻일 거야
var myValue = ensureDefined(someObject?.someProperty).someProperty
'개발하자' 카테고리의 다른 글
Jupyter/iPython에서 동적으로 플롯을 업데이트하는 현재 올바른 방법은 무엇입니까? (1) | 2023.10.23 |
---|---|
FastAPI를 사용하여 대용량 파일을 다운로드하는 방법은 무엇입니까? (2) | 2023.10.23 |
Python poetry, 선택적 종속성 설치 (0) | 2023.10.21 |
기존 플러터 앱/프로젝트에 플랫폼을 추가하려면 어떻게 해야 합니까? (0) | 2023.10.21 |
Floter iOS RevenueCat 적발되지 않은 예외 'NS 내부 불일치 예외' (2) | 2023.10.20 |