현재 다음과 유사한 기능을 수행하고 있습니다 (토론을 위해 최소한의 작업 예제를 작성했습니다).
interface Variable {
someMethod: () => void
}
const validateVariable(variable: Variable | undefined) {
if(!variable) {
throw new Error('Variable is undefined!')
}
}
const doSomething = async (): void => {
// maybeGetSomething returns a Variable or undefined
// depends on the database, so both cases are definitely possible
const variable: (Variable | undefined) = await maybeGetSomething()
validateVariable(variable)
variable.someMethod()
}
그러나 Typescript variable
는 정의되지 않았을 수 있다고 불평합니다 . 나는의 코드를 넣어의 생각처럼 안 validateVariable
에 doSomething
내 경우에는 검증 내가 재사용 할 수 있어야 아닌 사소한 기능이기 때문이다. 또한 Typescript가 유형에 대해 불평하지 않도록 새 변수를 정의하는 것도 어리석은 느낌이 들었습니다. 유효성 검사 후에는 어쨌든 Variable 유형 만 가질 수 있기 때문입니다 (코드 validateVariable(variable)
가 던져지지 않는 한 줄을 통과 할 수 없습니다 . 이 경우 변수에 적절한 유형이 있음).
이 작업을 수행하는 좋은 방법은 무엇입니까? 나는 여전히 Typescript에 대해 많은 것을 배우고 있기 때문에 내 코드의 구조를 변경할 수 있습니다.
validateVariable
특별한 반환 유형 을 제공함으로써 , 함수가 (던지기와 반대로) 반환하면 변수를 정의해야한다고 typescript에 알릴 수 있습니다.
function validateVariable(variable: Variable | undefined): asserts variable is Variable {
if(!variable) {
throw new Error('Variable is undefined!')
}
}
당신이 할 경우, 후 전화 validateVariable(variable)
의 유형 variable
단지로 축소됩니다 Variable
.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다