我有一个typings 文件,里面塞满了深度嵌套的命名空间,由一堆C# 类生成。(这个类型文件已经被围绕内部模块构建的其他代码使用。我正在消除其他代码,但需要一段时间,我有一些代码需要立即运行。)
打字文件如下所示:
declare namespace Thing.Stuff.WhosOnFirst.WhatsOnSecond {
export interface IDontKnowsOnThird {
... lots of interfaces, no classes. In short, *nothing* that turns into JavaScript.
}
}
Run Code Online (Sandbox Code Playgroud)
当然,使用起来非常尴尬:
public findShortStop(
thirdBase: Thing.Stuff.WhosOnFirst.WhatsOnSecond.IDontKnowsOnThird,
pitcher: Thing.Stuff.WhosOnFirst.WhatsOnSecond.Tomorrow
) {
...
}
Run Code Online (Sandbox Code Playgroud)
所以我想使用 import 语句作为别名。巧合的是,我总是能够摆脱这样的陈述,因为“事物”实际上存在于我的作品中:
import Stuff = Thing.Stuff;
Run Code Online (Sandbox Code Playgroud)
但事实证明,我无法使用深度嵌套的类来做到这一点:
import WhatsOnSecond = Thing.Stuff.WhosOnFirst.WhatsOnSecond;
let baseman: WhatsOnSecond.IDontKnowsOnThird = {};
Run Code Online (Sandbox Code Playgroud)
上面的代码生成如下所示的JavaScript:
WhatsOnSecond = Thing.Stuff.WhosOnFirst.WhatsOnSecond;
var baseman = {};
Run Code Online (Sandbox Code Playgroud)
这是一个大问题:这是显示在控制台中的错误。
Uncaught (in promise) Error: (SystemJS) TypeError: Cannot read property 'WhosOnFirst' of undefined
at execute (http://localhost/Scripts/Shared/utils.js?v=180907165808:10:59)
Run Code Online (Sandbox Code Playgroud)
碰巧,“事物”存在。但“东西”没有。因此,当我为 Stuff 创建别名时,您将获得有效(如果无意义)代码,并且我可以通过该别名使用 Thing.Stuff 命名空间中的所有类型,因此 Stuff.WhosOnFirst 就好了:
Stuff = Thing.Stuff; // evaluates to undefined. Compiler likes me, runtime likes me, no errors.
Run Code Online (Sandbox Code Playgroud)
但是使用进一步嵌套的属性这样做是完全失败的,因为尝试访问“未定义”的属性是一个 JavaScript 错误,会停止脚本的执行。
所以:如何创建这些导入别名来让我引用深度嵌套的命名空间,这样我就不必每次引用接口时都输入整个命名空间?
打字了在他们每次我使用一个接口变老时六个字命名空间真快。
经过进一步的尝试,我最终得到了这个,它正确地为命名空间设置了别名,并让我可以正确访问该命名空间下的枚举:
import "../../Path/To/.d.ts/File/With/Compiled/Suffix/myTypings.js";
import WhatsOnSecond = Thing.Stuff.WhosOnFirst.WhatsOnSecond;
...
let someEnum: WhatsOnSecond.SomeEnum = WhatsOnSecond.SomeEnum.AnEnumValue;
Run Code Online (Sandbox Code Playgroud)
顶部.js文件的导入将所有命名空间设置代码带入浏览器,这反过来又让我可以通过 WhatsOnSecond 的导入设置以下命名空间别名。
我对这个黑客不是特别满意,因为我拖了实现细节,但它具有实际工作的优点。
| 归档时间: |
|
| 查看次数: |
1196 次 |
| 最近记录: |