打字稿-对象可能未定义-“修复”类型定义的正确方法

时间:2020-10-16 00:29:48

标签: typescript

我正在通过以下调用使用aws dynamodb:

const params: DynamoDB.DocumentClient.QueryInput = {
  TableName: tableName,
  KeyConditionExpression: '#hashKey = :hashValue AND #rangeKey = :rangeValue',
  ExpressionAttributeNames: {
    '#hashKey': hashKey,
    '#rangeKey': rangeKey
  },
  ExpressionAttributeValues: {
    ':hashValue': hashValue,
    ':rangeValue': rangeValue
  },
  IndexName: indexName,
  Limit: fetchLimit,
  ScanIndexForward: true,
  ProjectionExpression: projectionItems.concat([documentKey])
}
// These 2 ridiculous lines are necessary to get rid of error
if (!params.ExpressionAttributeNames) params.ExpressionAttributeNames = {}
if (!params.ExpressionAttributeValues) params.ExpressionAttributeValues = {}

if (beforeDateCondition) {
  params.FilterExpression = '#updatedAt < :updatedAt'
  params.ExpressionAttributeNames['#updatedAt'] = 'updatedAt'. // ERROR HERE
  params.ExpressionAttributeValues[':updatedAt'] = beforeDateCondition // ERROR HERE
}

如果我在实际定义ExpressionAttributeNamesExpressionAttributeValues之后没有检查并定义它们,则TS会在最后两行中给我错误,提示它们可能未定义。

我知道不需要ExpressionAttributeValuesExpressionAttributeNames(类型为ExpressionAttributeNames?: ExpressionAttributeNameMap;),但是如果没有以下方法,我该如何解决:

  1. 编写让我畏缩的代码行
  2. 重写我自己的DynamoDB.DocumentClient.QueryInput定义

这里合适的方法是什么?

0 个答案:

没有答案