您可以使用.bind()
method綁定window.console
您的自定義日誌方法,然後,這樣,當它被稱爲代碼是在原有範圍內執行返回的功能。
class LoggerService {
public log = console.log.bind(window.console);
}
// ...or annotated:
class LoggerService {
public log: (message) => void = console.log.bind(window.console);
}
然後,如果你想在你的條件語句添加:
class LoggerService {
public log = clientSideLogging ? console.log.bind(window.console) :() => {};
}
這裏是an example
在這樣做時,行號會被調用記錄器服務的log
方法時保留與編譯的TypeScript代碼。
從上面提到的,如果你想實現的
log
方法裏面額外的邏輯,那麼你可以利用一個班輪解決方案
撇開getter將返回並調用綁定到window.console
的console.log
功能。
class LoggerService {
public get log(): Function {
// Implemnt server-side logging
return console.log.bind(window.console);
}
}
正如你所知道的,重要的是要返回的console.log
功能,因爲它不會保留當它被另一個範圍內直接調用的行號。
然後,如果你想在你的條件語句添加:
class LoggerService {
public get log(): Function {
const log = console.log.bind(window.console);
// Implemnt server-side logging
return clientSideLogging ? log :() => {};
}
}
這裏是an example與編譯後的代碼打字稿。
是一個打字稿編譯時錯誤? – Aravind