文章参考
问题描述
- 在typescript中想使用一个定时器,记录考试的时间,在离开页面的时候需要把定时器关闭掉,防止内存溢出
- 但是不知道
setInterval()
返回函数的类型,使用Vscode 的提示信息,返回的是NodeJS.Timeout
,但是编译器还是提示报错
解决办法
- 定义对象数据类型是
NodeJS.Timeout
import { Component, OnInit } from '@angular/core';
import {HttpClient} from "@angular/common/http";
import {IQuersion} from '@app/types/IQuersion'
import * as moment from 'moment';
@Component({
selector: 'app-examination-detail',
templateUrl: './examination-detail.component.html',
styleUrls: ['./examination-detail.component.scss']
})
export class ExaminationDetailComponent implements OnInit {
questionList: IQuersion[]
timer: NodeJS.Timeout | null = null
timerFormatStr: string
constructor(public http:HttpClient) {
this.timer = setInterval(() => {
this.timerFormatStr = moment(new Date()).format('hh:mm:ss')
}, 1000)
}
ngOnInit(): void {
let urlStr:string = 'api/detail/examlist'
this.http.post(urlStr, {}).subscribe(response => {
this.questionList = this.formatOriginExamindata(response)
console.log(response);
});
}
}
引入 moment的方式
import * as moment from 'moment';
- 修改
tsconfig.app.json
文件,引入 types节点值为’node’
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/app",
"types": [
"node"
]
},
"files": [
"src/main.ts",
"src/polyfills.ts"
],
"include": [
"src/**/*.d.ts"
]
}