gpt4 book ai didi

javascript - 带有接口(interface)的 Typescript 类型定义嵌套命名空间

转载 作者:行者123 更新时间:2023-11-30 15:00:58 29 4
gpt4 key购买 nike

我想为 Javascript 项目定义类型。让我们考虑一个简化版本:

a
|
+ A.js
+ b
|
+ B.js

有一个文件夹“a”,里面有一个文件夹“b”,我想将它用作:

import { A } from "a"
import { B } from "a/b"

我理想中想要的打字看起来像这样:

declare namespace a {
interface A { }

namespace b {
interface B { }
}
}

declare module "a" {
export = a
}

declare module "a/b" {
export = a.b
}

但是,这给了我错误 Cannot use namespace 'a' as a value

我注意到如果我将接口(interface)更改为类,问题就会解决。有人可以阐明为什么会这样吗?有没有办法通过接口(interface)获得这样的定义?

最佳答案

https://github.com/Microsoft/TypeScript/issues/17530

A namespace that contains no values or statements is considered an uninstantiated namespace, and has no runtime value.

您可以通过以下方式防止错误:

declare module "a/b" {
import b = a.b
export = b
}

但是,除非 namespace aa.b 在运行时实际上可用作全局变量,否则您应该这样写:

declare module "a" {
export interface A {
foo: string
}
}

declare module "a/b" {
import {A} from 'a'
export interface B {
bar: A
}
}

关于javascript - 带有接口(interface)的 Typescript 类型定义嵌套命名空间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46534025/

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