使用AWS DataStore.query返回一个对象,该对象的属性是经过解析的对象,但linter需要一个字符串



当我使用DataStore.query检索数据时,我从linter中得到了冲突的数据类型。示例:

schema.graphql

type Card @model @auth(rules: [{ allow: private }]) {
id: ID!
input: AWSJSON  
}

react组件javascript:

const originalCard = await DataStore.query(Card, cardid);
// originalCard.input is of type string | undefined | null according to my linter
if(!originalCard.input) return; // Ignore non-string cases
await DataStore.save(
Card.copyOf(originalCard, (updated) => {
updated.input = JSON.stringify(originalCard.input);
})
);

上面应该只保存与已经接收到的输入相同的输入。这是我的门楣接受的。问题是,当我运行代码时,我会得到一个错误,它建议originalCard.input值实际上是一个对象。因此,似乎DataStore.query正在为我解析input值,这很好,只是给了linter错误的信息。

廉价而肮脏的修复方法只是告诉typescriptinput值实际上是一个对象:...as unknown as Record<string,any>,但我怀疑有更好的方法和/或我做错了什么?

为什么不尝试添加类型缩小检查,以便TypeScript可以静态分析逻辑路径:

const originalCard = await DataStore.query(Card, cardid);
if(typeof originalCard.input === 'object') {
await DataStore.save(
Card.copyOf(originalCard, (updated) => {
updated.input = JSON.stringify(originalCard.input);
})
);
}

因此,这将取代if(!originalCard.input) return;

最新更新