当函数的返回值可以有多种类型时(使用|),如何在TypeScript中选择一个?

时间:2018-10-06 15:11:37

标签: reactjs typescript react-native react-native-keychain

我正在使用带有TypeScript的React Native来构建应用程序。我正在围绕React Native Keychain包的功能编写自己的自定义包装。

export const getToken = () => getGenericPassword().then(creds => creds.password);

问题在于getGenericPassword()的类型是:

function getGenericPassword(
  options?: Options
): Promise<boolean | {service: string, username: string, password: string}>;

我的linter抱怨说,如果凭据的类型为boolean,则密钥密码不存在。

Property 'password' does not exist on type 'boolean | { service: string; username: string; password: string; }'.
  Property 'password' does not exist on type 'false'.

如何选择这些值之一?

1 个答案:

答案 0 :(得分:2)

如果该值为布尔值,则不具有这些属性。您必须首先处理结果是布尔值的情况:

if (typeof creds == "boolean") {
    // Handle a boolean result
} else {
    // You can access the fields here
}

TypeScript理解在if分支内,结果是布尔值,而在else分支内,结果不是布尔值,因此它必须是您的字典类型。

如果Typescript不能像这样工作,那么您可以编写代码来忽略Promise返回布尔值的情况,并且稍后当您尝试从{{ 1}}