如何在RxJs(BehaviourSubject)中使用TypeScript进行严格的类型检查?
How to use TypeScript in RxJs (BehaviourSubject) for strict type checking?
我正在尝试使用 RxJs 创建一个 BehaviourSubject。在此代码中
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
有什么方法可以限制以下在订阅回调中没有有效参数的调用吗?
如果您查看 BehaviorSubject 的类型定义,请注意 class 接受通用类型参数(即 BehaviorSubject<T>
)。
在您的示例中,您可以通过创建 BehaviorSubject
的参数化版本来规定内部值属于 string
类型,具体而言:
const name = new BehaviorSubject<string>("Dog");
在这样做时,您应该将类型检查应用于 next()
和 subscribe()
的后续用法。
您可以为您的 BehaviourSubject
创建类型别名,因为它接受类型参数作为泛型的一部分。
interface NameSubjectObj {
a: number;
b: {
c: number
}
}
type NameSubject = string | boolean | NameSubjectObj;
const name = new BehaviourSubject<NameSubject>("Dog");
这将确保上述 BehaviourSubject
将接受指定的 3 种类型。
我正在尝试使用 RxJs 创建一个 BehaviourSubject。在此代码中
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
有什么方法可以限制以下在订阅回调中没有有效参数的调用吗?
如果您查看 BehaviorSubject 的类型定义,请注意 class 接受通用类型参数(即 BehaviorSubject<T>
)。
在您的示例中,您可以通过创建 BehaviorSubject
的参数化版本来规定内部值属于 string
类型,具体而言:
const name = new BehaviorSubject<string>("Dog");
在这样做时,您应该将类型检查应用于 next()
和 subscribe()
的后续用法。
您可以为您的 BehaviourSubject
创建类型别名,因为它接受类型参数作为泛型的一部分。
interface NameSubjectObj {
a: number;
b: {
c: number
}
}
type NameSubject = string | boolean | NameSubjectObj;
const name = new BehaviourSubject<NameSubject>("Dog");
这将确保上述 BehaviourSubject
将接受指定的 3 种类型。