typescript - 如何在 unknown 类型中正确使用可选链
演示:
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 '';
}
我不想使用断言,数据类似于请求返回的数据
答案#1
正如 Alex Chashin 评论的那样,TypeScript 目前不能很好地从 in 运算符推断类型。所以也许我需要这个函数
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";
}
使用类型谓词
答案#2
你可以使用泛型类型。例如:
type IData = {value: string}
function getValue<T extends IData>(data: T) {
if (typeof data === 'object' && data && 'value' in data) {
return data.value;
}
return '';
}
