我跟着这个blog关于如何为WebStorm设置调试TypeScript,我想我已经明白了,调试器看起来像是正常工作。但是当我在我的TypeScript代码中设置断点时,它并没有被击中,当我查看我的控制台时,看起来错误已经发生在WebStorm能够连接调试器之前。
我查看了有关如何设置调试器的其他文章,它们几乎完全一样,所以想知道这是怎么回事。
以下是我的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"
]
}
}
FWIW,我特别调试了一组试图在d3.js中包装文本的代码。我关注此snippet,尤其是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);
}
}
});
}
我在TypeScript定义中特别遇到getComputedTextLength
的问题。功能在那里,但不知何故JavaScript无法找到它。我已经尝试了之前StackOveflow question中已回答的内容,对我没有用,所以我尝试搜索node_modules
哪个类型定义了.getComputedTextLength
,从而解释了{{1}但仍然是错误。
顺便说一句,我使用节点版本v7.10.0 和 jsdom 来模拟浏览器