Отладка WebStorm TypeScript: ошибка уже произошла задолго до того, как был присоединен отладчик - PullRequest
0 голосов
/ 07 июня 2018

Я следовал этому блогу о том, как настроить отладку TypeScript для WebStorm, и я думаю, что в значительной степени понял, отладчик выглядит так, как будто работает правильно.Но когда я устанавливаю точки останова в своем коде TypeScript, он не срабатывает, и когда я заглядываю в консоль, похоже, что ошибка уже произошла задолго до того, как WebStorm смог подключить отладчик.

enter image description here

Я просмотрел другие статьи о том, как настроить отладчик, и все они в значительной степени одинаковы, поэтому удивляюсь, как это происходит.

Вот некоторые конфиги в моем проекте WebStorm:

// tsconfig.json
{
    "include": [
        "src/scripts/*.ts",
        "src/scripts/*.js"
    ],
    "exclude": [
        "node_modules", "typings"
    ],
    "compilerOptions": {
        "module": "commonjs",
        "target": "es6",
        "noImplicitAny": true,
        "allowJs": true,
        "sourceMap": true,
        "lib": [
            "dom",
            "es2015.promise",
            "es6"
        ],
        "typeRoots": [
            "./typings", "./node_modules/@types"
        ]
    }
}

enter image description here

FWIW, я особенно отлаживаю наборкод, который пытается обернуть текст в d3.js.Я придерживаюсь этого фрагмента , особенно функции wrap, но в моем случае мне нужно преобразовать его в TypeScript, который затем приводит к следующему:

function wrap (text: d3.Selection<d3.BaseType, {}, d3.BaseType, any>, width: number) {
    text.each(function () {
        let text = d3.select(this);
        let words = text.text().split(/\s+/).reverse();
        let word;
        let line: string[] = [];
        let lineNumber = 0;
        let lineHeight = 1.1; // ems
        let y = text.attr('y');
        let dy = parseFloat(text.attr('dy'));
        let tspan = text.text(null).append('tspan').attr('x', 0).attr('y', y).attr('dy', dy + 'em');
        while (words.length > 0) {
            word = words.pop();
            line.push(word);
            tspan.text(line.join(' '));
            let node: SVGTextContentElement = tspan.node() as SVGTextContentElement;
            if (node.getComputedTextLength() > width) {
                line.pop();
                tspan.text(line.join(' '));
                line = [word];
                tspan = text.append('tspan').attr('x', 0).attr('y', y).attr('dy', `${++lineNumber * lineHeight + dy}em`).text(word);
            }
        }
    });
}

Я особенновозникли проблемы с getComputedTextLength, в моих определениях TypeScript.Функция есть, но почему-то JavaScript не может ее найти.Я уже пытался ответить на предыдущий вопрос StackOveflow , у меня не получилось, поэтому я попытался найти node_modules, тип которого определяет .getComputedTextLength, поэтому объясняет SVGTextContentElement, но все жеошибка.

enter image description here

Кстати, я использую версию узла v7.10.0 и jsdom для эмуляции браузера

...