web-dev-qa-db-ja.com

TypeScriptでモーメント期間フォーマットを使用する方法

TypeScript(Ionic2/Angular2)プロジェクトでmoment.jsを使用しています。 この投稿 に続いて、プラグインを試してみたい moment-duration-format

Npmパッケージとタイプ定義があり、インポートとして使用できます。

import moment from 'moment';
...
let duration = moment.duration(decimalHours, 'hours');

moment-duration-format を使用したい

npm install moment-duration-format --saveを介してインストールし、次にnpm i @types/moment-duration-format --saveを介して型定義をインストールしました。

私は両方のnpmモジュールを見ることができます。

いつものように、そのような型定義の使用方法には常にいくつかの謎があります(インポートを含む使用法がどの文書にもないようです)。

import 'moment-duration-format';import duration from 'moment-duration-format';を追加してみました(moment-duration-format/index.d.ts 'はモジュールではありません)。

次のように使用しようとするとエラーが発生します。

let dd = moment.duration.format(400.99, 'hours').format('D:HH:mm');

// (TS error [ts] Property 'format' does not exist on type '(inp?: DurationInputArg1, unit?: DurationConstructor) => Duration'.

TypeScriptでこれを使用する方法について誰かが何か考えを持っていますか?.

前もって感謝します

11
peterc

回避策 here を使用していましたが、ype defが修正されたようです。タイプdefの更新を取得するので、次のことができます...

import * as moment from 'moment';
import 'moment-duration-format';

let duration = moment.duration(decimalHours, 'hours') ;   
let options : moment.DurationFormatSettings   = {
  forceLength : false,
  precision : 0,
  template : formatString,
  trim : false
};
let result  = duration.format(formatString, 0, options);
10
peterc

durationを呼び出すのではなく、プロパティとして使用しています。試してください:

let dd = moment.duration(400.99, 'hours').format('D:HH:mm');

これは実際にはTypeScriptの問題ではありません。 JavaScriptでも動作しません。 JavaSctriptでは、ランタイム時にエラーが発生しますが、TypeScriptではコンパイル時に実行できません(その価値があることが証明されます)。

2
Sefe

私は同じ問題を抱えています...

型定義に誤りがあるようです。他にも同じ問題があります: https://github.com/souldreamer/noti-cli/blob/ef104c22792e0dfeb67d3372b04e231d45ffaa55/src/shared/pipes.ts#L38

Githubのプルリクエストの一部として問題が修正されましたが、残念ながらマージせずにクローズされました: https://github.com/DefinitelyTyped/DefinitelyTyped/pull/14327

一時的な回避策として、最初のリンクのコード行を使用できます。 2番目のステップとして、将来のリリースで問題を修正するために、githubで新しいプルリクエストを作成する必要があります。

1
R_B_

問題は、R-B_がモーメント期間フォーマットの型付けモジュールで誤った型定義を正しく処理したためです。

Lintエラーのために最後のリクエストが閉じられたので、これに対して新しいプルリクエストを作成します。

ここまでのように、プロジェクトでカスタムタイプ定義を使用できる限り、 https://github.com/TwoStone/leaderboard/blob/develop/subprojects/webapp/src/custom-typings.d.ts =プロジェクトでファイルを作成するだけで、当面は機能するはずです。

0
twostone