web-dev-qa-db-ja.com

ユーティリティクラスの構造化方法

いくつかのユーティリティ機能があります。これらをパッケージ化してからインポートする最良の方法は何ですか?

これは私がやろうとしていることです:

import * as util from './util'

export class myClass{
     constructor()
     {
           util.doSomething("test");
     }
}

それからクラスで:

export class Util{
    doSomething(val: string){ return val;}

    doSomethingElse(val: string{ return val;}
}

VSから表示されるエラーメッセージは、「プロパティdoSomethingがutil型に存在しません」です。

49
Greg Gum

含むファイルutils.tsを作成する場合

export default class Utils {
    static doSomething(val: string) { return val; }
    static doSomethingElse(val: string) { return val; }
}

次のようにクライアントコードを簡素化できます。

import Utils from './utils'

export class MyClass {
     constructor()
     {
         Utils.doSomething("test");
     }
}
84
k7sleeper

ここにはいくつかの問題があります:

  1. 何もインスタンス化しておらず、doSomethingはインスタンスメソッドです
  2. import * as utilを実行すると、utilはモジュール内のオブジェクトではなくモジュールを表します。

Utilが必要な場合は、それをインポートするだけです。

import { Util } from './util'

次に、最後にメソッドを呼び出す前に、Utilをインスタンス化する必要があります。

var u = new Util();
u.doSomething("test");

パッチが適用されたコードは次のとおりです。

import { Util } from './util'

export class MyClass{
     constructor()
     {
         var u = new Util();
         u.doSomething("test");
     }
}

とはいえ、utilsの使用方法について奇妙な点があるようです。これは完全に個人的な意見ですが、コンストラクタで「何かをする」、つまり副作用を引き起こすメソッドを呼び出すことはありません。

また、Utilのメソッドは、クラスが依存している状態を保持しないため、そのクラスにある必要があるようには見えません。モジュールから通常の関数をいつでもエクスポートできます。 utilsモジュールを次のように書いた場合:

export function doSomething(val: string) { return val; }

export function doSomethingElse(val: string) { return val; }

関数を直接エクスポートし、インスタンス生成の手間を回避します。実際、元のコードはそのまま正常に動作します。

36
Asad Saeeduddin

別の方法:
1)utils.tsファイルの定数をエクスポートします。

export const doSomething = (val: string): any => {
  return val;
};

export const doSomethingElse = (val: string): any => {
  return val;
};

2)メイン* .tsファイルでこのメソッドをインポートして使用します。

import { doSomething, doSomethingElse } from './util';
...
let value1 = doSomething('abc');
let value2 = doSomethingElse ('efg');
2
Renat Gatin

エクスポートする機能を持つtil.tsクラスを作成することもできます

export const formatDateOfBirth = 
(dob: string) : string => `${dob.substring(0, 4)}-${dob.substring(4, 6)}-${dob.substring(6, 8)}`;

以下のようにメソッドをインポートできます。共有フォルダー構造はsrc> app> sharedです。このインポートはsrc> app> shelf> shelf.component.ts内で呼び出しています。ファイル

import { formatDateOfBirth } from '../shared/utils/util';
public getFormattedDate(dob: string):string{
  return formatDateOfBirth(dob);
}
0
vijay

または、オブジェクトリテラルとしてエクスポートできます。

export const Util = {
    doSomething(val: string){ return val;},
    doSomethingElse(val: string{ return val;}
}
0
Max Rahder