网站搜索

Javascript/Typescript - 如何从代码中移除重复项


我有一段代码基本上是在重复自己。唯一的区别是参数的类型,scan 调用 this.getDbClient().scan(params),而 query 调用 this.getDbClient().query(params)。

static scanTable = async (params: DynamoDB.DocumentClient.ScanInput) => {
    let items;
    let scanResults: any[] = [];
    do {
        items = await this.getDbClient().scan(params).promise();
        (items.Items || []).forEach((item) => scanResults.push(item));
        params.ExclusiveStartKey = items.LastEvaluatedKey;
    } while (typeof items.LastEvaluatedKey !== 'undefined');

    return scanResults;
}

static queryTable = async (params: DynamoDB.DocumentClient.QueryInput) => {
    let items;
    let scanResults: any[] = [];
    do {
        items = await this.getDbClient().query(params).promise();
        (items.Items || []).forEach((item) => scanResults.push(item));
        params.ExclusiveStartKey = items.LastEvaluatedKey;
    } while (typeof items.LastEvaluatedKey !== 'undefined');

    return scanResults;
}

我尝试提取函数并使用

async (params: DynamoDB.DocumentClient.ScanInput | DynamoDB.DocumentClient.QueryInput)

然后尝试去做

if params instanceof DynamoDB.DocumentClient.ScanInput call `scan(params)`
else if params instanceof DynamoDB.DocumentClient.QueryInput call `query(params)`

但似乎不能使用 instanceof

错误:类型 'typeof DocumentClient' 上不存在属性 'ScanInput'。ts(2339)

错误:类型 'typeof DocumentClient' 上不存在属性 'QueryInput'。ts(2339)

我在这里可以做什么来避免代码重复?有什么想法吗?