Disallow the static Observable.create and Subject.create functions (rxjs-x/no-create)
February 11, 2026 ยท View on GitHub
๐ผ This rule is enabled in the following configs: โ
recommended, ๐ strict.
๐ญ This rule requires type information.
This rule prevents the use of the static create function on both Observable of Subject.
Both APIs are deprecated by RxJS and exist primarily for backward compatibility.
Developers should instead:
- Use
new Observable(...)to create observables. - Use concrete
Subjecttypes (Subject,BehaviorSubject,ReplaySubject, andAsyncSubject) and explicit operators when connecting observers to observables.Subject.createdoes not create a realSubjectbut instead creates a wrapper that "glues together" anObserverand anObservable.
Rule details
Examples of incorrect code for this rule:
const answers = Observable.create(subscriber => {
subscriber.next(42);
subscriber.next(54);
subscriber.complete();
});
// This does NOT send events from 'observable' to 'observer'.
const frankenSubject = Subject.create(observer, observable);
frankenSubject.subscribe(value => console.log(value)); // Subscribes to 'observable'.
frankenSubject.next("Test"); // Emits to `observer`.
Examples of correct code for this rule:
const answers = new Observable<number>(subscriber => {
subscriber.next(42);
subscriber.next(54);
subscriber.complete();
});
observable.subscribe(value => console.log(value));
observer.next("Test");
When Not To Use It
If you rely on RxJS's deprecation warnings and don't need to double-flag usage, then you don't need this rule.
Type checked lint rules are more powerful than traditional lint rules, but also require configuring type checked linting.
Further reading
- GitHub: Deprecate
createstatic methods - Stack Overflow: what should I use instead?