详解 Observable 与 Observer:形参不是 T 类型的 “决定者”

厘清Observable与Observer的T类型关系

        在前端开发中,尤其是使用 Babylon.js 这类框架 / 库时,我们经常会遇到 Observable(可观察对象) 与 Observer(观察者) 这对 “搭档”。它们是实现事件订阅、异步通信的核心模式,但开发者在实际使用中,很容易被一个问题困惑:回调函数的形参和 Observer<T> 中的 T 类型到底是什么关系?

        比如之前有同学在 Babylon.js 中订阅 onBeforeRenderObservable 时,纠结 “回调函数没写形参,T 是不是就可以随便填?”,甚至因此出现类型错误。今天我们就从原理到实战,彻底讲清这个问题。

一、先搞懂:Observable 与 Observer 到底是什么关系?

        在聊形参之前,我们得先明确 Observable 和 Observer 的核心职责 —— 它们本质是 “发布者 - 订阅者” 模式的具体实现:

  • Observable(发布者):负责 “产生事件”。它就像一个广播电台,会在特定时机(比如 Babylon.js 中场景渲染前、模型销毁时)对外发送 “信号”,这个信号可能携带数据(比如当前场景实例、模型实例)。
  • Observer(订阅者):负责 “接收事件”。它是一个包含回调函数的对象,通过 Observable.add() 订阅发布者,当发布者发送信号时,Observer 的回调函数会被触发。

        用一句话总结:Observer 是 “听广播的人”,Observable 是 “发广播的电台”;电台决定播什么内容(信号类型),听众可以选择听或不听(用或不用内容),但不能改变电台的内容类型。

二、关键误区:T 类型由回调函数形参决定?错!

        很多开发者初次使用 Observer<T> 时,会下意识认为:“如果回调函数没写形参,T 就可以随便设;如果写了形参,T 就和形参类型一致”。但这是完全错误的 ——Observer<T> 中的 T 类型,只由 Observable 本身决定,与回调函数是否接收形参、接收什么形参无关。

1. T 类型的 “真正主人”:Observable

        在 TypeScript 环境中,每个 Observable 都有明确的 “信号类型” 定义,比

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值