检索词
- 命名空间符号
- 命名空间符号属性
- 命名空间符号属性
建议
在TypeScript命名空间上声明符号属性的能力。
用例
请参见“已确定类型”/“已确定类型”#42154(注解)。
示例
// doSomething.d.ts
import { promisify } from "util";
declare function doSomething(
foo: any,
onSuccessCallback: (result: string) => void,
onErrorCallback: (reason: any) => void
);
declare namespace doSomething {
function [promisify.custom](foo: any): Promise<string>;
}
export = doSomething;
检查清单
我的建议符合以下准则:
- 这不会是对现有TypeScript/JavaScript代码的重大更改
- 这不会改变现有JavaScript代码的运行时行为
- 这可以在不基于表达式的类型发出不同JS的情况下实现
- 这不是运行时功能(例如,库功能、带有JavaScript输出的非ECMAScript语法等)
- 此功能与TypeScript's Design Goals的其余部分一致。
5条答案
按热度按时间wmomyfyw1#
看起来这主要是为了
.d.ts
表示-这是意图吗?因为否则,你已经可以向函数添加计算属性了。@weswigham提出的一个问题是,假设您重新使用
let
/const
/var
来导出这些符号,这将引入解析歧义。qij5mzcb2#
#40594可能会通过在名称空间中允许以下内容来帮助实现这一点:
看起来这主要是为了
.d.ts
表示-这是意图吗?因为否则,你已经可以向函数添加计算属性了。是的,这是针对
.d.ts
表示,它使用namespace
作为函数的属性:Playground链接
jfgube3f3#
我看不出
export { toStringTag as [Symbol.toStringTag] };
在JS中会被允许(我承认,从语法上讲,示能是有意义的),考虑到导出绑定是提升的,但是Symbol.toStringTag
的值需要执行才能被知道。我们 * 可以 * 只 * 在环境上下文中允许它,但是它有可能继承TC39的任何功能,以允许以符号命名的模块成员在本地运行。#40594中的链接ecma262线程只允许在这些位置使用文字字符串。pprl5pva4#
我的意思是只允许在TypeScript的
namespace
构造中使用它。ef1yzkbh5#
我们可以只在环境上下文中允许它,但这有可能会步上tc39可能做的任何事情,以在本机允许符号命名的模块成员。
😦