Visual Studio angular material 设计教程中的 moment.js 示例代码错误 TS2305
Visual Studio Code error TS2305 with moment.js example from angular material design tutorial
我尝试了 https://material.angular.io/components/datepicker/overview#choosing-a-date-implementation-and-date-format-settings 中的以下代码(见下文)。
它符合要求,我可以 运行 代码,但我在 visual studio 代码中收到错误消息,提示“默认值不是 moment 的导出成员”。我正在使用 Visual Studio 代码 1.24.1
import { default as _rollupMoment} from 'moment';
src/app/component.ts(20,10) 中的错误:错误 TS2305:模块“../frontend/node_modules/moment/moment”'没有导出成员 'default'。
import {Component} from '@angular/core';
import {FormControl} from '@angular/forms';
import {MAT_MOMENT_DATE_FORMATS, MomentDateAdapter} from '@angular/material-moment-adapter';
import {DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE} from '@angular/material/core';
// Depending on whether rollup is used, moment needs to be imported differently.
// Since Moment.js doesn't have a default export, we normally need to import using the `* as`
// syntax. However, rollup creates a synthetic default module and we thus need to import it using
// the `default as` syntax.
import * as _moment from 'moment';
// tslint:disable-next-line:no-duplicate-imports
import {default as _rollupMoment} from 'moment';
const moment = _rollupMoment || _moment;
/** @title Datepicker that uses Moment.js dates */
@Component({
selector: 'datepicker-moment-example',
templateUrl: 'datepicker-moment-example.html',
styleUrls: ['datepicker-moment-example.css'],
providers: [
// `MomentDateAdapter` and `MAT_MOMENT_DATE_FORMATS` can be automatically provided by importing
// `MatMomentDateModule` in your applications root module. We provide it at the component level
// here, due to limitations of our example generation script.
{provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]},
{provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS},
],
})
export class DatepickerMomentExample {
// Datepicker takes `Moment` objects instead of `Date` objects.
date = new FormControl(moment([2017, 0, 1]));
}
我暂时保留了 Importing moment into Angular gives error 中建议的第二个导入语句。现在可以使用了...
刚才把第二条注释掉如下:
import * as _moment from 'moment';
// import { default as _rollupMoment} from 'moment';
// const moment = _rollupMoment || _moment;
const moment = _moment;
我有同样的错误。然后我像这样更改我的代码:
import * as moment from 'moment';
type Moment = moment.Moment;
const moment1 = moment;
export class AppComponent {
date = new FormControl(moment1());
}
而且有效。
希望对您有所帮助。
注意:如果您在导入 moment 时遇到问题,请尝试添加
"allowSyntheticDefaultImports":编译器选项为真
在您的 tsconfig.json 文件中,然后使用语法
https://momentjs.com/docs/#/use-it/typescript/
它对我有用:)
我和 Diff 有同样的错误,没有导出成员 'Diff'。所以,我必须用下一种方式来解决它。希望对smb有帮助
import moment from 'moment';
import Diff = moment.unitOfTime.Diff;
我尝试了 https://material.angular.io/components/datepicker/overview#choosing-a-date-implementation-and-date-format-settings 中的以下代码(见下文)。 它符合要求,我可以 运行 代码,但我在 visual studio 代码中收到错误消息,提示“默认值不是 moment 的导出成员”。我正在使用 Visual Studio 代码 1.24.1
import { default as _rollupMoment} from 'moment';
src/app/component.ts(20,10) 中的错误:错误 TS2305:模块“../frontend/node_modules/moment/moment”'没有导出成员 'default'。
import {Component} from '@angular/core';
import {FormControl} from '@angular/forms';
import {MAT_MOMENT_DATE_FORMATS, MomentDateAdapter} from '@angular/material-moment-adapter';
import {DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE} from '@angular/material/core';
// Depending on whether rollup is used, moment needs to be imported differently.
// Since Moment.js doesn't have a default export, we normally need to import using the `* as`
// syntax. However, rollup creates a synthetic default module and we thus need to import it using
// the `default as` syntax.
import * as _moment from 'moment';
// tslint:disable-next-line:no-duplicate-imports
import {default as _rollupMoment} from 'moment';
const moment = _rollupMoment || _moment;
/** @title Datepicker that uses Moment.js dates */
@Component({
selector: 'datepicker-moment-example',
templateUrl: 'datepicker-moment-example.html',
styleUrls: ['datepicker-moment-example.css'],
providers: [
// `MomentDateAdapter` and `MAT_MOMENT_DATE_FORMATS` can be automatically provided by importing
// `MatMomentDateModule` in your applications root module. We provide it at the component level
// here, due to limitations of our example generation script.
{provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE]},
{provide: MAT_DATE_FORMATS, useValue: MAT_MOMENT_DATE_FORMATS},
],
})
export class DatepickerMomentExample {
// Datepicker takes `Moment` objects instead of `Date` objects.
date = new FormControl(moment([2017, 0, 1]));
}
我暂时保留了 Importing moment into Angular gives error 中建议的第二个导入语句。现在可以使用了...
刚才把第二条注释掉如下:
import * as _moment from 'moment';
// import { default as _rollupMoment} from 'moment';
// const moment = _rollupMoment || _moment;
const moment = _moment;
我有同样的错误。然后我像这样更改我的代码:
import * as moment from 'moment';
type Moment = moment.Moment;
const moment1 = moment;
export class AppComponent {
date = new FormControl(moment1());
}
而且有效。
希望对您有所帮助。
注意:如果您在导入 moment 时遇到问题,请尝试添加 "allowSyntheticDefaultImports":编译器选项为真 在您的 tsconfig.json 文件中,然后使用语法
https://momentjs.com/docs/#/use-it/typescript/
它对我有用:)
我和 Diff 有同样的错误,没有导出成员 'Diff'。所以,我必须用下一种方式来解决它。希望对smb有帮助
import moment from 'moment';
import Diff = moment.unitOfTime.Diff;