TypeScript v1의 undefined 처리
객체의 속성이나 단일 링크를 읽었을 때 값이 없으면 undefined일 수 있습니다. 반환 타입이 문자열이나 객체를 요구한다면 사용 전에 이 경우를 처리해야 합니다.
명시적으로 확인
가상의 Employee에 firstName과 lastName이 있다고 가정합니다. 두 속성이 없으면 UserFacingError로 이유를 설명합니다.
import { Function, UserFacingError } from "@foundry/functions-api";
import { Employee } from "@foundry/ontology-api";
export class EmployeeNameFunctions {
@Function()
public getFullName(employee: Employee): string {
if (employee.firstName === undefined || employee.lastName === undefined) {
throw new UserFacingError("이름과 성이 모두 필요합니다.");
}
return employee.firstName + " " + employee.lastName;
}
}
검사 이후 TypeScript는 두 필드가 문자열임을 알 수 있습니다. 이 조건은 undefined만 검사하므로 빈 문자열을 허용합니다. 빈 이름도 거부하려면 별도의 업무 규칙으로 검사해야 합니다. if (!(firstName && lastName))은 빈 문자열까지 거부하므로 undefined 검사와 같지 않습니다.
비-null 단정
속성 뒤에 !를 붙이면 컴파일러에게 값이 있다고 단정할 수 있습니다.
return employee.firstName! + " " + employee.lastName!;
이 표현은 값이 채워졌다는 별도의 보장이 있는 함수 본문에서만 사용합니다. !는 런타임 검증이나 기본값을 추가하지 않으므로 실제로 값이 없으면 문자열에 undefined가 들어가거나 후속 연산에서 불명확한 오류가 생길 수 있습니다. 값이 없는 이유를 사용자에게 알려야 한다면 명시 검사를 사용합니다.
구조화된 오류는 업무 오류를 쿼리 반환 계약으로 선언하는 방법이며, 사용자 오류는 화면에 표시할 메시지를 전달합니다.