是可能的程度打字稿甚至内建类型,比如这个版本,即使开箱即用的打字稿不知道String.repeat
方法的类型定义:扩展string类在某些情况下不能正常工作
interface String {
repeat(c: number): string;
}
const spaces = " ".repeat(4);
然而,当我尝试在我的一些代码,应用这种模式,我得到一个生成错误: https://github.com/emmanueltouzery/ng-typeview/blob/c8539fc3403f7e700a023d13655702bdb2113c1b/src/ng-typeview.ts#L18
我得到:
src/ng-typeview.ts(18,24): error TS2339: Property 'repeat' does not exist on type '" "'.
src/ng-typeview.ts(23,20): error TS2339: Property 'repeat' does not exist on type '" "'.
而这一点,尽管额外的方法线12-14的声明。
我试图简化代码在类,或者让我的工作样本中的代码更接近我的全部代码,直到我隔离那是什么打破了功能的东西,但我没有得到任何地方。
怎么来的小样本中多余的接口的作品,但在我的应用程序不?我正在使用tsc 2.1.4。
编辑
我走投无路进一步的问题。在同一文件中导出接口是问题的最小再现:
interface String {
repeat(c: number): string;
}
const spaces = " ".repeat(4);
export interface Anything {
whatever: number;
}
删除从“出口界面”,问题“出口”消失。
EDIT2 好吧,现在我无法使我的小样本,额外的界面或所有工作都没有。它是如何早一点工作的?!?!?所以我想这个问题也可以被重新表述为“是否有可能让打字稿接受这个方法在保持es3目标的String上?”。我知道有可能投到any
,宁可避免它。
添加' export'将你的文件变成'外部模块',所以'String'接口变成了模块范围,而不是全局范围。 Nitzan的回答是正确的 - 如果你需要在全局范围声明一些东西,你必须使用'declare global'。 – artem