Closed volkanunsal closed 2 years ago
Interesting use-case, when I re-produce it in isolation, I don't see that error.
interface Person {
email: string;
}
const queryperson = TypeSafeQueryDocumentCommand<Person>()
new queryperson({
TableName: "",
IndexName: "gsi2",
KeyConditionExpression: `GSI2PK = :pk`,
ExpressionAttributeValues: {
":pk": "email"
}
})
So, I believe the root cause of this problem is ConstructorParameters<typeof QueryCmd>[0]
.
The QueryCommand
type determines the ExpressionAttributeValues
based on the input data, i.e. based on the value of KeyConditionExpression
. Since you've explicitly typed the return as ConstructorParameters<typeof QueryCmd>[0]
, the type is not aware of "GSI2PK = :pk"
, so it doesn't enforce the correct ExpressionAttributeValues
.
Workaround is to use the QueryInput
type.
interface Person {
email: string;
}
const QueryCmd = TypeSafeQueryDocumentCommand<Person>();
function mkArgs(
email: string
): QueryInput<
Person,
"GSI2PK = :pk",
undefined,
undefined,
undefined,
JsonFormat.Document
> {
return {
TableName: "",
IndexName: "gsi2",
KeyConditionExpression: `GSI2PK = :pk`,
ExpressionAttributeValues: {
":pk": "email",
},
};
}
This issue is now marked as stale because it hasn't seen activity for a while. Add a comment or it will be closed soon. If you wish to exclude this issue from being marked as stale, add the "backlog" label.
Closing this issue as it hasn't seen activity for a while. Please add a comment @mentioning a maintainer to reopen. If you wish to exclude this issue from being marked as stale, add the "backlog" label.
When I use
TypeSafeQueryDocumentCommand
(QueryCmd
in the picture), it wrongly omitsExpressionAttributeValues
from the base type's keys.Type error: