【发布时间】:2021-02-06 05:57:30
【问题描述】:
因此,我想扩展 AWS SDK DynamoDB 类以拥有一个新的 scan 实现,以克服 1 MB 的限制(请参阅 AWS documentation 和 SO post)。找到关于 typescript 模块扩充的文档(查看 official docs 和 relevant SO questions 中的示例),即使 SO 示例实际上显示了如何扩展第三方类,我的解决方案(以类似方式设计)也不起作用.所以这是我的扩展:
import * as AWS from "aws-sdk";
declare module "aws-sdk" {
namespace AWS {
interface DynamoDB {
scanAll(params: any): any;
}
}
}
AWS.DynamoDB.prototype.scanAll = async function(params: AWS.DynamoDB.Types.ScanInput) {
let items : any[]
let db = <AWS.DynamoDB> this;
var result = await db.scan(params).promise()
if (result.Items)
items.concat(result.Items);
while (result.LastEvaluatedKey) {
params.ExclusiveStartKey = result.LastEvaluatedKey;
result = await db.scan(params).promise()
if (result.Items) {
items.concat(result.Items);
}
}
}
export {}
Typescript build 在AWS.DynamoDB.prototype.scanAll = 行出现错误
TS2339: Property 'scanAll' does not exist on type 'DynamoDB'.
我会假设命名空间在这里发挥作用?但是如何解决呢?
我尝试像这样省略命名空间:
import * as AWS from "aws-sdk";
declare module "aws-sdk" {
interface DynamoDB {
scanAll(params: any): any;
}
}
DynamoDB.prototype.scanAll = async function(params: AWS.DynamoDB.Types.ScanInput) {
let items : any[]
let db = <AWS.DynamoDB> this;
var result = await db.scan(params).promise()
if (result.Items)
items.concat(result.Items);
while (result.LastEvaluatedKey) {
params.ExclusiveStartKey = result.LastEvaluatedKey;
result = await db.scan(params).promise()
if (result.Items) {
items.concat(result.Items);
}
}
}
export {}
然后 Typescript 甚至找不到类型 DynamoDB 并给了我:
TS2304: Cannot find name 'DynamoDB'.
【问题讨论】:
标签: typescript amazon-dynamodb module-augmentation