いくつかのユーティリティ機能があります。これらをパッケージ化してからインポートする最良の方法は何ですか?
これは私がやろうとしていることです:
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型に存在しません」です。
含むファイル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");
}
}
ここにはいくつかの問題があります:
doSomething
はインスタンスメソッドです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; }
関数を直接エクスポートし、インスタンス生成の手間を回避します。実際、元のコードはそのまま正常に動作します。
別の方法:
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');
エクスポートする機能を持つ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);
}
または、オブジェクトリテラルとしてエクスポートできます。
export const Util = {
doSomething(val: string){ return val;},
doSomethingElse(val: string{ return val;}
}