这不起作用
static myDebug(message: string, ...optionalParameters: any[]): void {
// tslint:disable-next-line
console.debug(message, optionalParameters);
}
它只写这样的行
test myDebug this.url = Array(2), windowId = %d
代替
test myDebug this.url = /myurl, windowId = 123
在C语言中无法做到这一点,所以我需要这样做:
va_start(Args, Message);
vsnprintf_s(Buffer, sizeof(Buffer), _TRUNCATE, Format, Args);
va_end(Args);
CallTheFunction(Buffer);
答案 0 :(得分:1)
如果要记录其余阵列的条目而不是其余阵列本身,则将其展开:
static myDebug(message: string, ...optionalParameters: any[]): void {
// tslint:disable-next-line
console.debug(message, ...optionalParameters);
// --------------------^^^
}
在许多方面,扩展语法是rest语法的补充。
如果您这样叫myDebug
,请使用它:
myDebug("hi there", 1, 2, 3);
它会这样调用console.debug
(有效):
console.debug(message, optionalParameters[0], optionalParameters[1], optionalParameters[2]);
答案 1 :(得分:0)
您可以通过使用具有可选参数的对象来解决此问题,这还将使您对所有选项都具有很好的自动补全功能。使用any
是有风险的,因为您可能有错别字或传递从未使用过的参数。我假设您使用Typescript来获得类型安全性。
interface OptionalParameters {
name?:string
}
static myDebug(p: OptionalParameters): void {
console.dir(p)
}
在调用myDebug时,您可以传递一个空对象或具有name参数的对象。
myDebug({}) // ok
myDebug({name:"hello"}) // ok
myDebug({name:"hello", test:"world"}) // test is not an option