gpt4 book ai didi

javascript - 与 typescript 语法混淆

转载 作者:行者123 更新时间:2023-12-02 22:51:35 26 4
gpt4 key购买 nike

我是 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中的成员是什么,它看起来不像一个方法,因为它没有方法名,而且它绝对不是一个属性,那么什么是(命名空间:字符串):调试器

2-debug 是一个对象,而不是方法,它的类型形状为 { default: Debug },那我们为什么可以使用 debug("Example App"),将其视为一种方法?

3-为什么我必须使用export = debug;?我们不能摆脱这个并使用

...
export declare var debug: { default: Debug };
// export = debug;

最佳答案

1.what's the member in interface Debug, it doesn't look like a method as it doesn't have a method name, and it is definitely not a property, so what is (namespace: string): Debugger

Debug 是一个接受字符串并返回调试器的函数。编写相同内容的更传统方法是:

type Debug = (namespace: string) => Debugger

第一个接口(interface)实际上并不需要使用这种替代语法,但第二个问题中的接口(interface)是有用的:

2-debug is an object, not a method, and it has a type shape of { default: Debug }, so how come we can use debug("Example App"), treating it as a method?

这是一个函数。但它还有额外的属性,这就是这种表示法的优点。它指出您可以将其作为函数调用(它接受字符串数组并返回 void),或者您可以访问其 .enabled 属性。

3-why I have to use export = debug;? can't we get rid of this and use

这会将其更改为命名导出而不是默认导出。这是可行的,但会改变导入方式。

关于javascript - 与 typescript 语法混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58160497/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com