假设我正在使用TypeScript声明文件在javascript中编码一个库,并且我想通过接口创建该库实例的“形状”,如下所示:
export interface Library {
foo: string;
bar: string;
}
现在假设foo
和bar
类型会更复杂,我想将其应用于不同的类型别名,例如:
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;
}
尽管有效,但令人困惑和模棱两可,因为一次导入将同时是两种不同的事物
我该如何解决?也许有一些提示?
答案 0 :(得分:1)
这没什么问题:
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
在大多数打字稿代码编辑器中,您可以cmd / ctrl单击某个类型以跳到该定义。这将跳转到您的库,并且很清楚类型来自何处。
大多数高知名度的库都不会在任何名称空间中隐藏它们的类型。例如:
import { Reducer } from 'react'
如果您有其他名为Reducer
的类型,React无关紧要。但是,如果这样做,您可以按照上述方法在自己的文件中轻松更改其本地名称。
TL; DR:我认为您正在尝试解决一个并不存在的问题。