typescript - Cách sử dụng Optional chaining đúng cách trong unknown
bản trình diễn :
function getValue(data: unknown) {
// return data?.value // error
// or
// use "value" in data to narrow the scope
if (typeof data === 'object' && data && 'value' in data) {
return data.value; // error
}
return '';
}
Tôi không muốn sử dụng các khẳng định dữ liệu tương tự với dữ liệu trả về bởi một yêu cầu
Câu trả lời #1
Như Alex Chashin đã bình luận, TypeScript hiện tại không thể suy ra kiểu từ toán tử 'in' rất tốt. Vì vậy có thể tôi cần hàm này.
function hasValue(it: unknown): it is ({ value: string }) {
return typeof it === "object" && it !== null && "value" in it;
}
function hasStringValue(it: unknown): it is ({ value: string }) {
return hasValue(it) && typeof it.value === "string";
}
Sử dụng các hàm kiểm tra kiểu
Câu trả lời #2
Bạn có thể sử dụng các kiểu tổng quát. Ví dụ:
type IData = {value: string}
function getValue<T extends IData>(data: T) {
if (typeof data === 'object' && data && 'value' in data) {
return data.value;
}
return '';
}
