typescript - Angular Aot エラー - エクスポートされた関数への参照で関数を置き換える方法
私はこのコードを持っています
export function LocalStorage(key?: string) {
return WebStorage(localStorage, key);
}
export function WebStorage(webStorage: Storage, key: string) {
return (target: Object, propertyName: string): void => {
key = key || propertyName;
let storageKey = WebStorageUtility.generateStorageKey(key);
let storedValue = WebStorageUtility.get(webStorage, key);
...
Object.defineProperty(target, propertyName, {
get: function() { ... },
set: function(value: any) { .. },
});
}
};
Angular CLIで--aotフラグを使用してプロジェクトをビルドしたときに、次のエラーを回避するにはどうすればよいですか。
エラー: シンボルの値を静的に解決中にエラーが発生しました。関数呼び出しはサポートされていません。関数やラムダをエクスポートされた関数への参照に置き換えることを検討してください(元の .ts ファイルの位置 15:12)。上記のファイル内でシンボル WebStorage を解決中にエラーが発生しました。
注: 上記のコードでは、位置 15:12 は (target: Object, propertyName: string): void => { です。
Angularコンポーネントでは、LocalStorageはプロパティデコレーターとして使用されます。例えば、
@LocalStorage() username: string = "";
回答 #1
この WebStorage をどう使うかはよくわかりませんし、エラーが出る場所としては奇妙に見えますが、一般的にはエラーメッセージが示す通りに関数を抽出することを行います。
したがって、WebStorage 関数をリファクタリングして、その内容を新しいエクスポートされたメソッドとして抽出することができます:
export function WebStorageInner(target: Object, propertyName: string) {
...
Object.defineProperty(target, propertyName, {
get: function() { ... },
set: function(value: any) { .. },
});
}
そして最初のものにそれを使用します:
export function WebStorage(webStorage: Storage, key: string) {
...
return WebStorageInner(target, propertyName);
};
