猿问

如何在RxJs(BehaviorSubject)中使用TypeScript进行严格的类型检查?

我正在尝试使用RxJs创建一个行为主体。在此代码中


import { BehaviourSubject } from 'rxjs';


const name = new BehaviourSubject("Dog");


// Here in the subscribe callback, I am using TypeScript to specify the argument type should be string.

name.subscribe((name: string):void => {console.log(name)});

name.next("cat"); //cat

我想限制下面的这些调用,因为我需要在上面提到的订阅回调中传递一个字符串作为参数。


name.next(5); // This will print 5

name.next({a:5,b:{c:10}}); // This will print the object

name.next(true); // This will print true

有没有办法限制以下在订阅回调中没有有效参数的调用?


茅侃侃
浏览 85回答 2
2回答

慕姐4208626

如果您查看&nbsp;BehaviorSubject&nbsp;的类型定义,请注意该类接受泛型类型参数(即 )。BehaviorSubject<T>在您的示例中,您可以通过创建 的参数化版本来规定内部值是某种类型,具体而言:stringBehaviorSubjectconst&nbsp;name&nbsp;=&nbsp;new&nbsp;BehaviorSubject<string>("Dog");在这样做时,应将类型检查应用于 和 的后续用法。next()subscribe()

30秒到达战场

您可以为 创建类型别名,因为它接受类型参数作为泛型的一部分。BehaviourSubjectinterface NameSubjectObj {&nbsp; a: number;&nbsp; b: {&nbsp; &nbsp; c: number&nbsp;&nbsp; }}type NameSubject = string | boolean | NameSubjectObj;const name = new BehaviourSubject<NameSubject>("Dog");这将确保上述内容将接受指定的 3 种类型。BehaviourSubject
随时随地看视频慕课网APP

相关分类

JavaScript
我要回答