У меня есть код, который выглядит следующим образом:
validateViaTransaction(
id: string,
datas: any,
callback: <T> (t: firestore.Transaction, data: any) => Promise<T>
) => {
return await firestore().
runTransaction(async t => {
get someting...
validate something and throw err...
return await callback(t, data);
}).catch(err => { throw err; });
}
сейчас, когда я пытаюсь использовать позже:
await validateViaTransaction(id, null, (t: firestore.Transaction) => {
t.set(new data here...., {merge: true});
return "Validation Successful";
})
сейчас, когда я проверяю тип возвращаемого кода, это Обещание <unknown>
, и когда я внедряю его в код, ошибка выглядит следующим образом.
Argument of type '(t: Transaction) => string' is not assignable to parameter of type '<T>(t: Transaction, data: any) => T'.
Type 'string' is not assignable to type 'T'.
'string' is assignable to the constraint of type 'T', but 'T' could be instantiated with a different subtype of constraint '{}'.ts(2345)
Есть ли способ сделать мою callback
функцию более похожей на generic-ish ?как после того, как я верну string
, тогда его тип также будет string