我现在有一个翻译管道将采用可变参数如何重载可变参数
@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}}'不起作用。我不确定你的建议。 –
对不起,我没有详细阅读这个问题,所以我没有注意到它是关于角度的。难怪我对'{{...}}'语法感到困惑:) –