我現在有一個翻譯管道將採用可變參數如何重載可變參數
@Pipe({name: 'translate', pure: true})
export class TranslationPipe {
constructor(private service: TranslationService) {}
transform(key: string, ...params: (number|string)[]): string {
// The translation service takes an array
return this._service.translate(key, params);
}
}
對於像error.message=You have {0} of {1} tries left
消息的功能,這就是所謂的像一個模板下面
{{ 'error.message' | translate : currentTry : totalTriesAllowed }}
然而,我們現在有一個情況,一個組件將密鑰和替換參數作爲一個數組(因爲它不知道有多少可能是因爲調用者提供的密鑰),我不知道有一個好方法爲該方法創建一個過載。
我曾嘗試從模板傳播論點,但不是有效的語法
{{ translationKey | translate : ...translationArgs }}
爲了能夠使這項工作,我想我需要一個像超載以下,這樣的翻譯管也可以傳遞一個數組作爲第一個參數,而不是單獨的參數
transform(key: string, params: (string|number)[]): string;
transform(key: string, ...params: (string|number)[]): string;
但是,我一直沒能找到支持此重載一個良好的實施。這是我目前的地方。
type ArryayOfStringOrNumber = (string|number)[];
export class TranslationPipe {
// ERROR: Overload signature is not compatible with function implementation
transform(key: string, params: ArryayOfStringOrNumber): string;
transform(key: string, ...params: ArryayOfStringOrNumber): string;
transform(key: string, ...params: ArryayOfStringOrNumber): any {
if (params[0] instanceof Array) {
// ERROR: The left-hand side of an 'instanceof' expression must
// be of type 'any', an object type or a type parameter.
params = params[0] as ArryayOfStringOrNumber;
}
return this._service.translate(key, params as ArryayOfStringOrNumber);
}
}
爲什麼不能讓你的代碼按,而是傳遞數組通過使用擴展語法到其餘參數? 'pipe.transform(key,... args);' –
@DavidSherret問題是關於能夠從模板調用這樣的函數。 '{{translationKey | translate:... translationArgs}}'不起作用。我不確定你的建議。 –
對不起,我沒有詳細閱讀這個問題,所以我沒有注意到它是關於角度的。難怪我對'{{...}}'語法感到困惑:) –