0

我正在使用带有 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 抱怨如果 creds 是 type ,则密钥密码不存在boolean

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

我怎样才能选择这些值之一?

4

1 回答 1

2

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

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

TypeScript 知道在if分支内部结果是布尔值,而在else分支内部不是,所以它必须是你的字典类型。

如果 Typescript 不能这样工作,你可以编写代码忽略承诺返回布尔值的情况,并且稍后当你尝试.passwordfalse

于 2018-10-06T15:17:27.517 回答