我正在建立一个可让您养狗的打字稿库。
// index.ts
export interface Dog {
breed: string;
color: string;
}
export function createDog(breed: string, color: string): Dog {
return { breed, color };
}
// breeds.ts
import { createDog } from "./index";
export function createSpaniel(color: string) {
return createDog("spaniel", color);
}
export function createLab(color: string) {
return createDog("labrador", color);
}
// tsconfig.json compiler options
target: "es5"
module: "commonjs"
declaration: true
strict: true
esModuleInterop: true
这个想法是,Dog接口是一个通用接口,可以使用breeds.ts
中的工厂函数来构造几种不同的品种。我对JS非常了解,但是我是Typescript的新手,我正努力了解Typescript如何解析不同模块中的类型。编译以上代码时,我在breeds.d.ts
中看到了一条丑陋的路径:
export declare function createSpaniel(color: string): import("../../../../../../Users/myself/Code/tmp/ts-dogs/src").Dog;
export declare function createLab(color: string): import("../../../../../../Users/myself/Code/tmp/ts-dogs/src").Dog;
如果我要发布库,则不会这样做。我可以通过添加import { Dog } from "./index"
来解决此问题,但是随后,lint会抱怨未使用的导入。我也不能使用全局变量,因为它将污染使用我的狗库作为依赖项的任何Typescript项目的全局范围。
在不实际导入的情况下在另一个模块中隐式使用类型定义的最佳方法是什么?