gpt4 book ai didi

typescript |如何避免命名空间和主库接口(interface)名称冲突?

转载 作者:行者123 更新时间:2023-12-05 03:51:20 25 4
gpt4 key购买 nike

假设我使用 typescript 声明文件在 javascript 中编写一个库,并且我想通过接口(interface)创建库实例的“形状”,如下所示:

export interface Library {
foo: string;
bar: string;
}

现在假设 foobar 类型会更复杂,我想将它执行到不同的类型别名,例如:

export type ID = string | number;

export interface Library {
foo: ID;
bar: ID;
}

现在我想给 ID 一些意义(因为“id”没有说明任何事情),我认为我能做到的唯一方法是将它移动到不同的命名空间,本质上应该命名为库 - “库”:

export namespace Library {
export type ID = string | number;
}

export interface Library {
foo: Library.ID;
bar: Library.ID;
}

虽然它有效,但它令人困惑和模棱两可,因为一个导入将同时是两个不同的东西

我该如何解决这个问题?也许一些命名技巧?

最佳答案

这没有错:

export type ID = string | number;

export interface Library {
foo: ID;
bar: ID;
}

请记住,您的库中的所有内容都必须从您的库中显式导入才能使用。当您这样做时,如果这对执行导入的代码很重要,您可以重命名导入。

import { Library, ID as LibraryID } from 'library'

// Locally defined ID that is different somehow
interface ID = { _id: number, cacheKey: string } // or whatever

const localId: ID = { _id: 123, cacheKey: 'qwerty' }
const libId: LibraryID = 123

在大多数 typescript 代码编辑器中,您可以使用 cmd/ctrl 单击一个类型以跳转到该定义。这将跳转到您的库,并且类型的来源将非常清楚。

大多数知名度高的库都不会在任何命名空间中隐藏它们的类型。例如:

import { Reducer } from 'react'

React 不关心您是否有其他名为 Reducer 的类型。但如果这样做,您可以轻松地在自己的文件中更改其本地名称,如上所述。


TL;DR:我认为您正在尝试解决一个实际上并不存在的问题。

关于 typescript |如何避免命名空间和主库接口(interface)名称冲突?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62939885/

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