【发布时间】:2019-10-07 08:33:58
【问题描述】:
我有以下结构:
project
|- types
|- global.d.ts
|- string.d.ts
|- wdio.d.ts
|- src
|- Models
|- Resources
|- Components
|- Extensions
|- string.ts
|- ...
|- tsconfig.json
|- wdio.conf.js
我尝试用一个函数来扩展字符串的原型。到目前为止我尝试了很多方法,我在几个网站上找到了。但是tsc 给我错误,或者 PHPStorm 显示错误消息。
// types/string.d.ts
declare interface String {
myCustomFn(text : string) : string;
}
// src/Extensions/string.ts
String.prototype.myCustomFn = function(text : string) : string {
// ... Logic
return 'myCustomFn';
};
// tsconfig.json
...
"typeRoots": ["./types/"],
"include": [
"./src/**/*.ts",
"./types"
]
...
// wdio.conf.js
...
before: function (capabilities, specs) {
require('ts-node').register({ files: true });
require('../extensions/String');
},
...
我将 String 类的扩充添加到 d.ts 文件中。然后我在一个单独的文件中定义函数的主体。当我在src/Extensions/string.ts 文件中实现它时,tsc 命令没有给出错误消息,但是 PHPStorm 显示以下错误:
TS2339: Property 'myCustomFn' does not exist on type 'String'.
此外,自动完成在代码中的任何地方都显示了我的方法,甚至可以执行代码,并使用myCustomFn函数。
问题:
- 这只是 IDE 的错误吗?
- 我做错了什么还是应该以不同的方式扩展 String 类?
【问题讨论】:
标签: javascript typescript webdriver-io typescript3.0 ts-node