如何解决返回值类型的TypeScript问题
我收到此tslint错误:
TS2322: Type 'ItemList | undefined' is not assignable to type 'Transaction<any,any,any>[]'. Type 'undefined' is not assignable to type 'Transaction<any,any>[]'.
我有此代码:
import { Transaction } from 'types';
import { DocumentClient as DynamoDBDocumentClient } from 'aws-sdk/clients/dynamodb';
export default async function getMyTransactions (
_root: any,args: null,): Promise<Array<Transaction<any,any>>> {
//some code for query and other stuff
const { Items } = await DocumentClient.getInstance().query(query).promise();
console.log('Items',Items);
return Items;
}
在console.log(Items)
中,我得到这样的信息:
[
{
id: '123',commissions: {
cc: 500,total: 1337
},createdAt: '2001-02-03T04:05:06+07',]
Transaction
的类型是这样的:
// I wont put the whole code,but those TF,TV,TC are used on other types not listed here
export interface Transaction<TF,TC> {
id: string;
commissions: Commissions;
createdAt: string;
}
因此,在我的函数开始时,我声明它将返回:Promise<Array<Transaction<any,any>>>
所以Items
实际上是Transaction
类型对象的数组。
为什么会出现错误?
解决方法
如您在typings中所见,Items
属性是不确定的,因为您在strict
中使用了tsconfig.json
设置,这将导致错误。因此,一个简单的解决方法是始终返回一个数组:
export default async function getMyTransactions (
_root: any,args: null,): Promise<Array<Transaction<any,any,any>>> {
// ...
const { Items } = await DocumentClient.getInstance().query(query).promise();
return Items || [];
}
或者您必须更新返回类型以反映Items
可能是什么,并且应该在方法的使用方处处理此未定义的情况:
Promise<Array<Transaction<any,any>> | undefined>
不幸的是,在查询数据时,dynamodb的类型没有任何泛型。我可以假设您必须执行以下操作才能使其正常工作:
export interface Transaction<TF,TV,TC> extends AttributeMap {
id: string;
commissions: Commissions;
createdAt: string;
}
,也许您必须专门键入强制转换,但是不确定:
const { Items } = await DocumentClient.getInstance().query(query).promise();
return Items || [] as Transaction<any,any>[];
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。