gpt4 book ai didi

javascript - 如何在 typescript 中正确编写条件 promise.resolve?

转载 作者:行者123 更新时间:2023-12-05 08:04:53 27 4
gpt4 key购买 nike

我有一个使用 TypeScript 的 React Native 项目,我想使用对象的 Promise.resolve().then() 条件导致 TypeScript 中的类型错误。情况如下:

我有第一个对象(作为示例):

const objectA = async () => {
// get the object from local storage
const user = await asyncStorage.getItem(userAKey)

return {
// types are all in string
id: user?.id || '',
email: user?.email || '',
}
}

我有第二个对象(作为示例):

const objectB = async () => {
// get the object from local storage
const user = await asyncStorage.getItem(userBKey)

return {
// types are all in string
id: user?.id || '',
email: user?.email || '',
organisation: user?.organisation || ''
}
}

因此这两个对象具有不同的类型和具有值的键。这是问题所在,我有一个条件可以根据某些主机类型检查要解析的对象:

const objectTobeResolved = type === 'primary' ? objectA : objectB

因此,根据该条件,我将其传递给 Promise:

const userData = () => {
Promise.resolve(objectTobeResolved).then((values) => { ... })
}

我会在 objectTobeResolved 的 typescript 中得到类型错误。基本上这里的类型错误是提到类似 objectA | objectB,但实际上我只需要根据上述条件传递其中一个对象,而不需要 objectA | objectB 条件,因为它只是 objectAobjectB,具体取决于我在应用程序启动器中声明的主机类型。

我不太明白如何在 typescript 中正确声明它,因为我刚刚学会使用 typescript 。

在这里写 promise 的正确方法是什么?我应该使用 race 还是 all 来代替?但我一次只需要检查一个对象。或者我应该以某种方式声明或初始化?或者我什至根本不需要使用 promise

编辑:我已经将上面的代码更新为我的真实案例场景。其实代码运行是正确的,只是类型错误一直出现,我没能通过测试。一个快捷方式是使用//@ts-ignore,但由于我们的做法是不忽略警告,所以我试图找到一种正确的方式来编写它而不会出现导致测试失败的警告。

最佳答案

更多代码会有所帮助,但我认为您可能会问的是如何创建一个联合类型,以便您可以有效地引用您的结果是这个或那个。如果是这样,也许你可以使用这样的东西?我相信您也可以用许多其他方式来表达它,但我只是想说明这一点。

const objectA = {
a: 1,
b: 2,
}

const objectB = {
c: 3,
d: 4,
e: 5,
}

interface ABtype {
a: Number
b: Number
}

interface CDEtype {
c: Number
d: Number
e: Number
}

interface ABpromiseType extends Promise<ABtype> {
}

interface CDEpromiseType extends Promise<CDEtype> {
}

interface ABCDEunionTypeCombined extends Promise<CDEtype | ABtype> {
}

// Something randomly true or false.
let conditionalCheck = new Date().getTime() % 2 == 0;

const someFunction = () => {
const objectTobeResolved : ABCDEunionTypeCombined = (conditionalCheck ? Promise.resolve(objectA) : Promise.resolve(objectB) );
}

关于javascript - 如何在 typescript 中正确编写条件 promise.resolve?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67020335/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com