1
의 나는 다음과 같은 코드가 있다고 가정 해 봅시다 :타이프 라이터 strictNullChecks 및 폐쇄
function f(x: string | undefined) {
if (x) {
console.log(x);
Promise.resolve()
.then(() => g(x)) // error, x is string | undefined
}
// x = undefined;
}
function g(y: string) {
}
유형 가드 같은 if (x)
행위, 그래서 x
console.log
에서 string
을 입력합니다. 그러나 .then
의 폐쇄에서 참조 할 때 유형은 string | undefined
입니다. .then
의 코드가 실행되기 전에 값이 유형 가드 외부의 정의되지 않은 값으로 다시 변경 될 수 있기 때문에이 값이 있어야합니다. 하지만 다시 설정하지 않으면 Typescript가이를 감지 할 수있는 종류의 분석을 수행하면 안됩니다.
x
에 !
연산자를 사용하여 해결할 수 있습니다. 그러나 저는 코드베이스에서 이런 종류의 일을 자주하고, x를 정의하지 않음으로써 나중에 깨지는 것을 막을 수는 없다는 것을 알았습니다.
다른 방법이 있습니까? 문제를 올바르게 이해하고 있습니까?
1 - 좋은 사실, 당신이 const 레퍼런스를 가지고있는 것이 아니라,'string' 만 입력하는 새로운 레퍼런스를 가지고 있다는 것입니다. 그래서'let'과'var'도 작동합니다. 그래도 혼란 스러울 것입니다. 2 - 사실,하지만 생각하는 시나리오에서는 그렇게 할 수 없습니다. 그렇지 않으면 나는 이미 :) –
그래, 당신은 const 부분에 대해 맞아, 나는 함수의 param에 넣으려고하기 시작했다. 그러나 그것은 허용되지 않는다. 그래서 그것을 var로 바꾸지 않고 함수의 몸체에 복사했다. /방해. –