使用保留名称的typescript命名空间声明

使用保留名称的typescript命名空间声明,typescript,types,Typescript,Types,我正在制作一个Http客户端。此脚本的typescript定义如下所示: declare namespace Http { type HttpOptions = ...; type HttpPromise<T> = ... function get<T>(url: string, options?: HttpOptions): HttpPromise<T>; function delete<T>(url: string,

我正在制作一个
Http
客户端。此脚本的typescript定义如下所示:

declare namespace Http {
   type HttpOptions = ...;
   type HttpPromise<T> = ...

   function get<T>(url: string, options?: HttpOptions): HttpPromise<T>;
   function delete<T>(url: string, options?: HttpOptions): HttpPromise<T>;
}
声明命名空间Http{
键入HttpOptions=。。。;
类型HttpPromise=。。。
函数get(url:string,options?:HttpOptions):HttpPromise;
函数删除(url:string,options?:HttpOptions):HttpPromise;
}
这里的
delete
正在叫喊,因为这是一个保留字。但是我的模块上确实有一个方法
Http.delete('/foo')


我该如何声明这种依赖关系?

我猜你不想听到“不要那样做”,但这可能是最好的建议。使用as标识符并不一定会失败,但如果某个JavaScript环境对此犹豫不决,您也不必感到惊讶。但没关系,我们会继续的


所以这有点奇怪。我想使用带引号的字符串文字,如TypeScript规范中所述:

字符串文字可用于提供无效标识符的属性名称

但这对函数名不起作用,函数名必须是有效标识符

显然,您可以做的一件事是为函数指定一个有效名称,然后:

这有用吗


另一个想法是使用,但同样如此。首先只使用类型别名声明名称空间,然后将已声明的常量与属性合并为同名常量。它脆弱而怪异,但对我来说也很有用:

declare namespace Http {
  export type HttpOptions = ...
  export type HttpPromise<T> = ...
}
declare const Http: {
  get<T>(url: string, options?: Http.HttpOptions): Http.HttpPromise<T>;
  "delete"<T>(url: string, options?: Http.HttpOptions): Http.HttpPromise<T>;  
}
声明命名空间Http{
导出类型HttpOptions=。。。
导出类型HttpPromise=。。。
}
声明常量Http:{
获取(url:string,options?:Http.HttpOptions):Http.HttpPromise;
“删除”(url:string,options?:Http.HttpOptions):Http.HttpPromise;
}

希望其中一个对你有用;祝你好运

我试试你的第二种方法。我专门为库编写了一个自定义包装器。因此,
delete
功能已经存在。我可以创建别名
del
remove
或其他东西,但不能。导出别名正是我想要的。谢谢
Http.get('url') // okay
Http.delete('url') // apparently okay but you probably shouldn't
Http['delete']('url') // okay
declare namespace Http {
  export type HttpOptions = ...
  export type HttpPromise<T> = ...
}
declare const Http: {
  get<T>(url: string, options?: Http.HttpOptions): Http.HttpPromise<T>;
  "delete"<T>(url: string, options?: Http.HttpOptions): Http.HttpPromise<T>;  
}