[英]What is causing VS to not allow me to extend built-in types with TypeScript
我已经看到了这个问题和其他类似的帖子,甚至在TS playground中完成了我想要的,但是在 VS 中我得到红色下划线并构建错误。
错误 txt: Error TS2339 Build:Property 'contains' does not exist on type 'String'.
我缺少一些配置吗?
关于你的第一个错误
TS2339 构建:“字符串”类型上不存在属性“包含”
确保在全局 scope 中扩展String
接口,而不是在模块文件中。 这意味着,文件顶层可能没有任何export
或import
。
interface String {
foo(): void
}
String.prototype.foo = () => { console.log("bar") }
"aksljflasd".foo()
您还可以在模块文件中使用declare global
:
export {}
declare global {
interface String {
foo(): void
}
}
"aksljflasd".foo()
关于第二个错误
“字符串”类型上不存在属性
includes
String.prototype.includes
至少需要ES6
。 因此,您的target
很可能是tsconfig.json
中的ES5
或更低版本。 此外,当您手动设置lib
选项时,请确保包含ES2015.Core
。
您发布的示例一直有效,直到您使用它制作es6模块。 尝试在操场文件中的某处使用export
或import
并观察错误弹出。
恕我直言,最干净的解决方案是将 String 接口声明移动到 *.d.ts 文件中,并将其包含在 typescript 编译中。 我将文件放入任意 /types 文件夹并在我的 tsconfig.json 中使用"include": ["types"]
以便它被拾取。 然后你可以在你喜欢的任何地方在你的代码中执行实际的扩展String.prototype.contains =...
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.