TypeError:无法使用 TSLint 和 TypeScript 读取未定义的属性“getFullWidth”
Posted
技术标签:
【中文标题】TypeError:无法使用 TSLint 和 TypeScript 读取未定义的属性“getFullWidth”【英文标题】:TypeError: Cannot read property 'getFullWidth' of undefined with TSLint and TypeScript 【发布时间】:2016-04-19 06:58:55 【问题描述】:我一直在按照 Dan Wahlin 的教程和在线示例来配置 Gulp 和 Typescript。我的代码正在运行,但我无法让 tslint() 工作。 tslint() 调用总是抛出异常:
node_modules\tslint\lib\language\walker\ruleWalker.js:18
this.limit = this.sourceFile.getFullWidth();
^
TypeError: Cannot read property 'getFullWidth' of undefined
at EnableDisableRulesWalker.RuleWalker [as constructor] (C:\Users\sscott\Development\OntarioDarts.com\node_modules\tslint\lib\language\walker\ruleWalker.js:18:37)
at EnableDisableRulesWalker.SkippableTokenAwareRuleWalker [as constructor] (C:\Users\sscott\Development\OntarioDarts.com\node_modules\tslint\lib\language\walker\skippableTokenAwareRuleWalker.js:11:16)
at new EnableDisableRulesWalker (C:\Users\sscott\Development\OntarioDarts.com\node_modules\tslint\lib\enableDisableRules.js:13:16)
at Linter.lint (C:\Users\sscott\Development\OntarioDarts.com\node_modules\tslint\lib\tslint.js:16:27)
at C:\Users\sscott\Development\OntarioDarts.com\node_modules\gulp-tslint\index.js:96:34
at respond (C:\Users\sscott\Development\OntarioDarts.com\node_modules\rcloader\index.js:73:7)
at respond (C:\Users\sscott\Development\OntarioDarts.com\node_modules\rcfinder\index.js:140:7)
at next (C:\Users\sscott\Development\OntarioDarts.com\node_modules\rcfinder\index.js:164:16)
at nextTickCallbackWith0Args (node.js:433:9)
at process._tickCallback (node.js:362:13)
我使用的是 Windows 10。我有 typescript、tslint、gulp-typescript 和 gulp-tslint。
已安装版本:
├─┬ gulp-typescript@2.10.0
│ └── typescript@1.7.3
├─┬ gulp-uglify@1.5.1
│ └─┬ uglify-js@2.6.0
│ └─┬ yargs@3.10.0
│ └─┬ cliui@2.1.0
│ └── wordwrap@0.0.2
├─┬ tslint@3.2.1
│ └─┬ optimist@0.6.1
│ └── wordwrap@0.0.3
└── typescript@1.7.5
Gulp 任务:
module.exports = function (gulp, PlugIns, Settings)
return function ()
gulp.src([Settings.SourceFiles.TypeScript])
.pipe(PlugIns.plumber())
.pipe(PlugIns.debug())
.pipe(PlugIns.typescript())
.pipe(PlugIns.tslint(
configuration:
rules:
"class-name": true,
"comment-format": [
true,
"check-space",
"check-uppercase"
],
"curly": true,
"eofline": true,
"indent": [
true,
"tabs"
],
"jsdoc-format": true,
"max-line-length": 100,
"no-unreachable": true,
"no-unused-expression": true,
"no-unused-variable": true,
"no-use-before-declare": true,
"one-line": [
true,
"check-open-brace",
"check-catch",
"check-else",
"check-whitespace"
],
"quotemark": [
true,
"single",
"avoid-escape"
],
"semicolon": true,
"switch-default": true,
"variable-name": [
true,
"allow-trailing-underscore",
"ban-keywords"
],
"whitespace": [
true,
"check-branch",
"check-decl",
"check-operator",
"check-separator",
"check-type"
]
))
.pipe(PlugIns.tslint.report("stylish"))
.pipe(gulp.dest(Settings.Destination.TSCompiled))
;
;
【问题讨论】:
【参考方案1】:如果告诉 TSLint 处理不以 .ts
或 .tsx
扩展名结尾的文件,则通常会发生此错误。我会确保您不会意外发送任何 .js
文件或具有其他扩展名的文件。 .js
文件将来可能会正常工作,但现在不会。
此外,我会尝试从命令行运行 TSLint,并在您的一些文件上使用相同的配置。如果它不能像这样正常工作,则可能表明存在 TSLint 错误。
【讨论】:
我更改了我的文件以尝试仅处理一个文件,这在 .ts 和 .tsx 上以同样的方式失败。但是, tslint 确实可以按照您的建议从命令行工作。我用 gulp-tslint 记录了一个错误。 github.com/panuhorsmalahti/gulp-tslint/issues/52 由于年龄原因我现在无法编辑我的最后一条评论,gulp-tslint 的问题已得到纠正,并且适用于较新的版本。 感谢您的回答!使用tslint src/ts/Person.ts
时,linting 对我有用。 :)以上是关于TypeError:无法使用 TSLint 和 TypeScript 读取未定义的属性“getFullWidth”的主要内容,如果未能解决你的问题,请参考以下文章
渲染中的错误:“TypeError:无法读取未定义的属性'_t'”在使用 Jest 的单元测试中
WebStorm TSLint:错误:未知选项 `-t json'
为 TSLint (NestJs) 和 ESLint (VueJs) 设置 VS Code linting