firebase / firebase/firebase-admin-node
Allow generic in onDocumentUpdated, onDocumentCreated, etc...
- 主要语言
- TypeScript
- 星标
- 1.7k
- 派生
- 419
- 平均合并
- 3 天 10 小时
- 30 天内合并 PR
- 16
描述
Problem:
Making a wrapper class where types can be inferred is not possible.
Goal:
```ts
onDocumentUpdated( // note the modified declaration below
`${Col.payments}/{paymentID}`,
handlers.authorizePayment,
);
```
with changes to the declaration such as:
```
// firestore.d.ts
export declare function onDocumentUpdated(document: Document, handler: (event: FirestoreEvent> | undefined, ParamsOf>) => any | Promise): CloudFunction | undefined, ParamsOf>>;
```
Use case:
It will be possible to write things like:
```ts
export type UpdateEvent = FirestoreEvent> | undefined>;
class AuthorizePaymentOnValidatedTrigger implements OnUpdate {
handle(event: UpdateEvent) {
// ...
}
}
```
-----
Currently I'm using a wrapper:
```ts
/// Used to create firebase triggers without having to cast
export abstract class Triggers {
static onDocumentUpdated(path: string, handler: OnUpdateHandler) {
return onDocumentUpdated(path, (event) => handler.handle(event as UpdateEvent));
}
static onDocumentCreated(path: string, handler: OnCreateHandler) {
return onDocumentCreated(path, (event) => handler.handle(event as CreateEvent));
}
static onDocumentDeleted(path: string, handler: OnDeleteHandler) {
return onDocumentDeleted(path, (event) => handler.handle(event as DeleteEvent));
}
}
export type UpdateEvent = FirestoreEvent>>;
export interface OnUpdateHandler {
handle(event: UpdateEvent): Promise;
}
export type CreateEvent = FirestoreEvent>;
export interface OnCreateHandler {
handle(event: CreateEvent): Promise;
}
export type DeleteEvent = FirestoreEvent>;
export interface OnDeleteHandler {
handle(deleted: DeleteEvent): Promise;
}
```
-----
together with #2202 would allow:
```ts
handle(event: UpdateEvent) {
const { before, after } = event.data;
}
```
instead of
```ts
handle(event: UpdateEvent) {
const data = event.data;
if (!data) return;
const before = data.before.data() as Payment;
const after = data.after.data() as Payment;
}
```
贡献指南
调研方向
从 firestore.d.ts 中的 onDocumentUpdated、onDocumentCreated 和 onDocumentDeleted 声明开始,以提议的泛型签名作为要求。检查文档路径、处理程序事件类型和文档数据目前是如何表示的;完成的标准是触发器 API 支持如示例所示的类型化泛型事件处理程序,无需包装器强制转换,并完成相关的 #2202 工作。
由索引模型根据 Issue 内容生成。
评估
- 技术栈
- firebase, typescript
- 领域
- backend-api-design, databases
- Issue 类型
- 功能
- 难度
- 5/5
- 预计耗时
- 一周以上
- 活跃度
- 停滞
- 描述清晰度
- 基本清楚
- 新手友好度
- 35/100