“时刻”没有导出成员“默认”

Posted

技术标签:

【中文标题】“时刻”没有导出成员“默认”【英文标题】:"moment" has no exported member 'default' 【发布时间】:2019-07-12 23:36:48 【问题描述】:

我正在使用moment.js 更改我的应用程序的本地日期格式,但收到以下错误:

“moment”在导入库时没有导出成员'default'。

下面是我的代码:

import Inject, Injectable, Optional from '@angular/core';
import DateAdapter, MAT_DATE_LOCALE, MatDateFormats from '@angular/material';
import * as _moment from 'moment';
import default as _rollupMoment, Moment from 'moment';

const moment = _rollupMoment || _moment;

【问题讨论】:

参考this 时刻的版本? @dileepkumarjami “时刻”:“^2.24.0” 您是否尝试添加以上内容? 在尝试@dileepkumarjami的建议后尝试重新运行您的项目,因为在您更改tsconfig.json时这是必要的 【参考方案1】:

tsconfig.json 文件中添加以下行:

"allowSyntheticDefaultImports": true

【讨论】:

【参考方案2】:

gulpfile.jsexternals 部分 添加 'moment/moment''moment' 两者

externals: [
      'moment/moment',
       'moment'
   ]

【讨论】:

【参考方案3】:

这里有一个完整的解决方案:

第一:

 npm install moment --save
 npm install @angular/material-moment-adapter

第二:

在你的 package.json 中的依赖项下确保你有以下代码:

    "@angular/material-moment-adapter": "^8.2.3",

第三:

在编译器选项下的 tsconfig.json 文件中添加以下内容:

"allowSyntheticDefaultImports": true

第四:

使用以下代码修改您的组件:

import  MomentDateAdapter  from '@angular/material-moment-adapter';
import  DateAdapter, MAT_DATE_FORMATS, MAT_DATE_LOCALE  from '@angular/material/core';
import * as _moment from 'moment';
import  default as _rollupMoment  from 'moment';

const moment = _rollupMoment || _moment;
export const MY_FORMATS = 
parse: 
  dateInput: 'LL',
,
display: 
  dateInput: 'YYYY-MM-DD',
  monthYearLabel: 'YYYY',
  dateA11yLabel: 'LL',
  monthYearA11yLabel: 'YYYY',
 ,
;

@Component(
 selector: 'app-newsfeedform',
 templateUrl: './newsfeedform.component.html',
 styleUrls: ['./newsfeedform.component.css'],
 providers: [
   provide: DateAdapter, useClass: MomentDateAdapter, deps: [MAT_DATE_LOCALE] ,

   provide: MAT_DATE_FORMATS, useValue: MY_FORMATS ,
],
)

第五:

在您的 component.html 文件 datepicker 中,如下代码:

     <mat-form-field appearance="outline" fxFlex>
                    <input matInput [matDatepicker]="publishdate" placeholder="Publish Date"
                        formControlName="publishdate">
                    <mat-datepicker-toggle matSuffix [for]="publishdate"></mat-datepicker-toggle>
                    <mat-datepicker #publishdate></mat-datepicker>
                </mat-form-field>

也就是说,您可以自定义 Angular 材质日期选择器任何您想要的格式,只需修改上面给出的格式。

【讨论】:

【参考方案4】:

尝试在“compilerOptions”下将"allowSyntheticDefaultImports": true 添加到您的tsconfig.json

【讨论】:

在 tsconfig 中添加是的,但是在 tsconfig 的哪个部分?根?编译器选项?库? compilerOptions 部分 添加到tsconfig.app.json 有效,而不是tsconfig.json【参考方案5】:

您似乎无法导入 moment

如您所见in the documentation, 对于 Typescript 2.x,请尝试在 compilerOptions 中添加 "moduleResolution": "node" tsconfig.json 文件,然后使用以下任何语法:

import * as moment from 'moment';
import moment = require('moment');

PS:确保你已经安装了moment.jsnpm

npm install --save moment

【讨论】:

我对“默认”这个词有疑问。

以上是关于“时刻”没有导出成员“默认”的主要内容,如果未能解决你的问题,请参考以下文章

构造器和多态

为啥工会成员数据没有默认初始化?

没有成员函数的类实例的默认返回

ES6:模块“猫鼬”没有默认导出

没有默认构造函数的对象成员的 Swig setter

打字稿 - TS1192:模块没有默认导出