2017-01-21 41 views
0

以下代码将引发tsc错误并不确定如何更正它。Rxjs with TypeScript编译错误

使用rxjs 5.0.3与2.1.5 TSC

import { Observable } from 'rxjs/Observable'; 
import { Subject } from 'rxjs/Subject'; 
import 'rxjs/Rx'; 

let subject = new Subject(); 

Observable.merge(subject, Observable.interval(500)) 
    .startWith(new Date()) 
    .scan((acc, curr) => { 
    const date = new Date(acc.getTime()); 
    date.setSeconds(date.getSeconds() + 1); 
    return date; 
    }) 
    .subscribe(v => { 
    let today = v.toISOString(); 
    console.log(today); 
    }); 

我看到的错误是:

node_modules/rxjs/Observable.d.ts(68,60): error TS2304: Cannot find name 'Promise'. 
node_modules/rxjs/Observable.d.ts(68,70): error TS2304: Cannot find name 'Promise'. 
node_modules/rxjs/observable/PromiseObservable.d.ts(40,31): error TS2304: Cannot find name 'Promise'. 
node_modules/rxjs/observable/PromiseObservable.d.ts(41,26): error TS2304: Cannot find name 'Promise'. 
node_modules/rxjs/operator/toPromise.d.ts(2,60): error TS2304: Cannot find name 'Promise'. 
node_modules/rxjs/operator/toPromise.d.ts(3,79): error TS2304: Cannot find name 'Promise'. 
node_modules/rxjs/operator/toPromise.d.ts(3,89): error TS2304: Cannot find name 'Promise'. 
test.ts(10,31): error TS2339: Property 'getTime' does not exist on type 'number | {}'. 
    Property 'getTime' does not exist on type 'number'. 
test.ts(15,19): error TS2339: Property 'toISOString' does not exist on type 'number | {}'. 
    Property 'toISOString' does not exist on type 'number'. 

回答

0

看起来相当直截了当像你尝试调用 “日期” 在一个普通的方法旧号码。 “acc”在这里不被解释为日期(或者它已经被转换为数字,并且您继续尝试将其作为日期对待)。

如果我猜的话,我会说改变:

const date = new Date(acc.getTime()); 

const date = new Date(acc).getTime(); 

可能是由障碍得到你。或者,因为你正在返回 “日期”:

const date = new Date(acc); 
date.setSeconds(date.getSeconds() + 1); 
return date.getTime (); 

最后:

let today = new Date (v).toISOString(); 
console.log(today); 

说明文档的 “扫描”(使用而不是 “startWith”, “种子” 另外,可能是有趣的):

acc: Any - the accumulated value. 
currentValue: Any - the current value 
index: Number - the current index 
source: Observable - the current observable instance 
[seed] (Any): The initial accumulator value. 
+0

谢谢蒂姆,我采用'acc'和'curr'类型的'any'方法 – devguy

0

要更正类型错误,请执行以下操作。

npm install --save-dev @types/core-js 

对于其他错误,我设置的类型acccurrany。更正后的代码在这里编译并运行正常。

import { Observable } from 'rxjs/Observable'; 
import { Subject } from 'rxjs/Subject'; 
import 'rxjs/Rx'; 

let subject = new Subject(); 

Observable.merge(subject, Observable.interval(500)) 
    .startWith(new Date()) 
    .scan((acc: any, curr: any) => { 
    const date = new Date(acc.getTime()); 
    date.setSeconds(date.getSeconds() + 1); 
    return date; 
    }) 
    .subscribe(v => { 
    let today = v.toISOString(); 
    console.log(today); 
    });