javascript - 与打字稿语法混淆
问题描述
我是 TS 新手,只是对它的语法有一些疑问,下面是我看到的一些代码:
//type declaration file
declare interface Debug {
(namespace: string): Debugger
}
declare interface Debugger {
(...args: string[]): void;
enabled: boolean;
}
declare var debug: { default: Debug };
export = debug;
下面是 index.ts 文件
import debug from "debug";
let db = debug("Example App");
db.enabled = true;
...
所以我的问题是:
1.interface中的成员是Debug
什么,它看起来不像一个方法,因为它没有方法名,而且它肯定不是属性,所以什么是(namespace: string): Debugger
2-debug
是一个对象,而不是一个方法,它的类型形状是{ default: Debug }
,那么我们怎么可以使用debug("Example App")
,把它当作一个方法呢?
3-为什么我必须使用export = debug;
?我们不能摆脱这个并使用
...
export declare var debug: { default: Debug };
// export = debug;
解决方案
1.Debug接口中的成员是什么,它看起来不像一个方法,因为它没有方法名,而且肯定不是属性,那么(namespace: string)是什么:Debugger
Debug 是一个接收字符串并返回调试器的函数。编写相同内容的更传统方法是:
type Debug = (namespace: string) => Debugger
第一个界面实际上并不需要使用这种替代语法,但是您的第二个问题中的界面是有用的界面:
2-debug是一个对象,不是一个方法,它的type shape是{ default: Debug },那我们怎么能用debug("Example App"),把它当成一个方法呢?
它是一个函数。但它也有额外的属性,这是这种表示法的优点。它指出你可以将它作为一个函数调用(它接受一个字符串数组并返回一个 void),或者你可以访问它的.enabled
属性。
3-为什么我必须使用export = debug;?我们不能摆脱这个并使用
这会将其更改为命名导出而不是默认导出。这是可行的,但会改变您导入它的方式。
推荐阅读
- macos - OSX上“stat”输出的每个字段的含义是什么?
- c++ - C++ 中嵌套模板类返回类型的头文件中函数返回类型的语法
- javascript - 防止食物在我的蛇体内生成
- python - 如何在 python3 中进行 Base32 编码?
- caching - Intel 芯片组如何保持 DMA 缓存一致性?
- html - 如何删除 flex 子项之间的边距?
- unity3d - HLSL 几何着色器中的硬编码三角形未显示在屏幕上
- r - 将 Shiny 应用程序部署到 RStudio Connect 时出错
- excel - Excel - 接收运行时错误 1004 ODBC 错误
- r - 当变量在另一个文件中定义时,将固定宽度的文件导入 R