繁体   English   中英

Moment-with-locales 和 TypeScript

[英]Moment-with-locales and TypeScript

早上好,

我正在开发一个高度国际化的基于 Angular 1.5 的站点,并且我正在尝试集成 MomentJS,以便我们的日期也可以国际化。

我们的很多代码都在 TypeScript 中,我无法让 Moment 的东西在 TypeScript 中工作。

Moment 目前是 2.15.2,并且在根 moment 文件夹中有一个 moment.d.ts 文件,但是因为我正在国际化这个我需要使用 min/moment-with-locales.js 文件,并且有没有 TypeScript 定义文件。

如果我提前使用 go 并使用

/// <reference path="../../bower_components/moment/moment.d.ts" />

它不起作用,因为那是与我正在使用的 moment-with-locales.js 不同的时刻实例。

这也不起作用:

import moment = require("../../bower_components/moment/min/moment-with-locales");

所以然后我拿了 moment.d.ts 文件,将它复制到 min/ 文件夹中并将其重命名为 moment-with-locales.d.ts,并在我的 TypeScript 文件中使用它,它似乎正在工作,但我我对此感到不安。

那么到底如何在 TypeScript 文件中使用 moment-with-locales.js 文件呢?

我只是做错了什么,还是在 TypeScript 中使用普通的 JavaScript 通常这么难?

基本上,在Typescript中,定义文件( *.d.ts )仅用于编译时,其主要目的是确保您的代码与这些文件中指定的内容一致。

定义文件在运行时完全不会干扰其JS对应文件,只要您的代码通过了编译阶段,它的行为就应该与编写JS文件时完全相同。

万一您没有定义文件,作为一种快速的技巧,您可以简单地声明一些var或function(请注意,这不是一个好习惯,但是,绝望的时光需要绝望的措施)。

例如,假设您有一个库声明了一个名为MySuperComplexJSLibrary ,在Typescript中,您可以声明/导出any类型的变量。 这将允许使用该惊人库的每个属性和方法,而不会出现编译问题。

我通过创建一个新的类型定义文件修复了这个错误。 moment-with-locales.d.ts我认为名称并不重要,它只需要具有以下定义的 d.ts:

declare module 'moment/min/moment-with-locales' {
  import moment from 'moment';
  export = moment;
}

据我了解,TS 会自动扫描并查找源代码中的所有 d.ts 文件,并将使用它们来搜索模块定义。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM