更新1:
mxGraph.d.ts完整代码:
declare module 'mxgraph' {
class mxGraph {
constructor(container: HTMLElement);
}
}
index.d.ts的完整代码:
declare module 'mxgraph' {
export interface mxGraphExportObject {
mxGraph: typeof mxGraph;
}
export type mxGraphOptions = {
mxBasePath?: string;
};
export default function (options?: mxGraphOptions): mxGraphExportObject;
}
我正在为mxgraph包创建类型声明库,主要代码是:
declare module 'mxgraph' {
export interface mxGraphExportObject {
mxGraph: typeof mxGraph;
// ...
}
export type mxGraphOptions = {
mxBasePath?: string;
// ...
};
export default function (options?: mxGraphOptions): mxGraphExportObject;
}
在我的项目中使用时,所有属性类型均为any
命名空间下的mx
:
import mxgraphFactory from 'mxgraph';
const mx = mxgraphFactory({
mxBasePath: 'assets',
});
mx.mxGraph;
mx
的类型有效。
答案 0 :(得分:1)
为什么变量类型变为任意类型?
您不应该使用typeof
运算符。 typeof
返回值的类型,因此可以是任何值。
考虑以下示例:
const foo: any = "bar";
type Foo = {
bar: string;
}
type FooBar = {
foo: typeof foo; // should not use typeof here
}
const foobar:FooBar = {
foo: "abc"
};
foobar.foo
此处foobar.foo是any
类型,在typescript中仍然有效。尽管typeof
并不是那样使用的。
首先定义MxGraph
类型,然后
export interface mxGraphExportObject {
mxGraph: MxGraph;
// ...
}
答案 1 :(得分:0)
尝试之后,我发现了原因,index.d.ts
应该使用/// <reference path="..." />
来引用其他声明文件。此提交可解决问题https://github.com/typed-mxgraph/typed-mxgraph/commit/244b0124ae46d09793f4cb0af5262af8f4807079