【问题标题】:Integrating Behaviour subject into Typescript application将 Behavior 主题集成到 Typescript 应用程序中
【发布时间】:2021-06-01 12:24:20
【问题描述】:

我尝试将 rxjs 集成到我的 typescript 项目中,但最终出现以下错误。

BehaviorSubject.js:5 Uncaught ReferenceError: exports is not defined
    at BehaviorSubject.js:5

testSubject.ts:22 Uncaught TypeError: Cannot read property 'BehaviorSubject' of undefined

包含行为主体的文件,

import { BehaviorSubject } from 'rxjs/BehaviorSubject';
     
export class TestProject { 

    constructor() {
        let testString = "Eric";
        let currentNameSubject$ = new BehaviorSubject(testString);

        currentNameSubject$.subscribe(val => {
               alert(val);
         });
 

     currentNameSubject$.next('Obama');
     currentNameSubject$.next('Jacob');
 } 
  }

tsconfig.json,

"compilerOptions": {
   

    /* Basic Options */
    "target": "es5",  
    "module": "amd", 
    "paths": {  
      "rxjs/*": [ "./node_modules/rxjs/*" ],
      "rxjs-compact/*": [ "./node_modules/rxjs-compact/*" ]       
     },
    "inlineSources": true, 
    "experimentalDecorators": true,  
    "emitDecoratorMetadata": true,
     "lib": [ "es6", "dom" ],
    "esModuleInterop": true
   }

package.json:

rxjs: 6.6.7,
 rxjs-compat: 6.6.7,
typescript: 4.2.4

【问题讨论】:

  • 我不认为你可以currentNameSubject$.subscribe,你需要currentNameSubject$.asObservable().subscribe
  • 谢谢,但那是另一部分,即使我删除该行,我也无法运行。我什至只尝试了构造函数中的前两行

标签: typescript rxjs


【解决方案1】:

我将模块更改为“commonjs”,这对我有用。 “路径”包含别名,这意味着您可以将属性简化为仅包名称。 “paths”的每个值都是相对于“baseURL”的路径列表。这就是为什么你应该将它添加到你的 tsconfig.json 中。

这里是我正在使用的测试项目:

tsconfig.json

{
  "compilerOptions": {
    /* Basic Options */
    "target": "es5",
    "module": "commonjs",
    "baseUrl": ".",
    "paths": {
      "rxjs": [ "node_modules/rxjs/*" ],
      "rxjs-compact": [ "node_modules/rxjs-compact/*" ]
    },
    "inlineSources": true,
    "experimentalDecorators": true,
    "emitDecoratorMetadata": true,
    "lib": [ "es6", "dom" ],
    "esModuleInterop": true
  },
  "exclude": ["node_modules"]
}

test.ts

import {BehaviorSubject} from 'rxjs/BehaviorSubject';

export class TestProject {
    constructor() {
        console.log(`it works`);
        let testString = 'Eric';
        let currentNameSubject$ = new BehaviorSubject(testString);

        currentNameSubject$.subscribe(val => {
            console.log(val);
        });


        currentNameSubject$.next('Obama');
        currentNameSubject$.next('Jacob');
    }
}

const test = new TestProject();

在 NodeJS 中运行

tsc --sourceMap && node test.js

【讨论】:

  • 嘿,我试过你的,但仍然出现错误,App.js:21 Uncaught ReferenceError: exports is not defined
  • 您使用什么编程语言或正在开发什么平台?
  • 前端只有打字稿,后端只有.net
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-05-01
  • 2011-11-25
相关资源
最近更新 更多