当函数 return 值可以有多种类型(使用 |)时,我如何在 TypeScript 中选择一个?
When a functions return value can be of many types (using |) how can I pick one in TypeScript?
我正在使用 React Native 和 TypeScript 构建一个应用程序。我正在围绕 React Native Keychain 包的功能编写自己的自定义包装器。
export const getToken = () => getGenericPassword().then(creds => creds.password);
问题是getGenericPassword()
的类型是:
function getGenericPassword(
options?: Options
): Promise<boolean | {service: string, username: string, password: string}>;
如果 creds 的类型为 boolean
,我的 linter 会抱怨密钥密码不存在。
Property 'password' does not exist on type 'boolean | { service: string; username: string; password: string; }'.
Property 'password' does not exist on type 'false'.
如何选择这些值之一?
如果值是布尔值,则它没有这些属性。您必须首先处理结果为布尔值的情况:
if (typeof creds == "boolean") {
// Handle a boolean result
} else {
// You can access the fields here
}
TypeScript 理解 if
分支内的结果是布尔值,而在 else
分支内则不是,所以它必须是你的字典类型。
如果 Typescript 不是这样工作的,您可以编写忽略承诺 returns 布尔值的代码,并且稍后当您尝试读取 [=13] 时会导致运行时问题=] 来自 false
我正在使用 React Native 和 TypeScript 构建一个应用程序。我正在围绕 React Native Keychain 包的功能编写自己的自定义包装器。
export const getToken = () => getGenericPassword().then(creds => creds.password);
问题是getGenericPassword()
的类型是:
function getGenericPassword(
options?: Options
): Promise<boolean | {service: string, username: string, password: string}>;
如果 creds 的类型为 boolean
,我的 linter 会抱怨密钥密码不存在。
Property 'password' does not exist on type 'boolean | { service: string; username: string; password: string; }'.
Property 'password' does not exist on type 'false'.
如何选择这些值之一?
如果值是布尔值,则它没有这些属性。您必须首先处理结果为布尔值的情况:
if (typeof creds == "boolean") {
// Handle a boolean result
} else {
// You can access the fields here
}
TypeScript 理解 if
分支内的结果是布尔值,而在 else
分支内则不是,所以它必须是你的字典类型。
如果 Typescript 不是这样工作的,您可以编写忽略承诺 returns 布尔值的代码,并且稍后当您尝试读取 [=13] 时会导致运行时问题=] 来自 false