Вот некоторая информация, чтобы воспроизвести проблему!
Сначала создайте файл 'logger.ts' с таким содержанием:
class DebugLogging {
public log(msg: string) {
const error = new Error();
console.log(error.stack);
const errorStack = error.stack;
console.log(errorStack);
const realStringStack = "-> " + error.stack;
console.log(realStringStack);
debugger
console.log(msg);
}
}
const logger = new DebugLogging();
logger.log("test");
Затем скомпилируйте файл TypeScript с помощью:
tsc --source-map logger.ts
Теперь создайте файл 'logger. html' со следующим содержимым:
<html>
<head>
<script src="logger.js"></script>
</head>
<body>
<p>look at the console output...</p>
<body>
</html>
Откройте файл HTML в браузере Chrome (я использую V80. 0.3987.163) и посмотрите на консоль JavaScript, которая должна была остановить оператор 'debugger'.
Вывод первых двух console.log оба оператора отображают, как ожидается, один и тот же стек вызовов TypeScript. Но выходные данные третьего console.log показывают вместо этого стек вызовов JavaScript.
Как только стек вызовов преобразуется в строку, сопоставление информация потеряна.
Теперь вы можете поэкспериментировать в консоли, например, чтобы получить ожидаемый результат:
> error // display the contents of the Error object
< Error
at DebugLogging.log (logger.ts:3)
at logger.ts:16
Теперь прибывает странный момент: введя это в консоли, вы получите получить стек вызовов JavaScript вместо стека вызовов TypeScript в виде строки:
> error.stack // display the contents of the Error object's stack property
< "Error
at DebugLogging.log (file:///home/me/exer/tss/logger.js:5:21)
at file:///home/me/exer/tss/logger.js:15:8"
> error.stack.split(/at /) // display the contents of the Error object's stack property split into parts
< (3) ["Error↵ ", "DebugLogging.log
(file:///Users/shunyam/exer/tss/logger.js:5:21)↵ ",
"file:///Users/shunyam/exer/tss/logger.js:17:8"]
Теперь вернемся к моему первоначальному вопросу. Как я могу получить содержимое стека вызовов TypeScript в переменную, чтобы реально манипулировать ею?
Спасибо за потраченное время!