我有一个JavaScript方法,可以根据目录结构自动导入JSON Schema。这意味着我有一个位于/path/to/my/file.json
的文件,然后将其加载到schemas.path.to.my.file
中。
我使用以下TypeScript定义在TypeScript中使用我的代码,但无济于事。它一直给我no index signature
的错误,尽管似乎有一个。
import jsonschema = require("jsonschema");
interface NestedSchemas {
[key: string]: NestedSchemas | jsonschema.Schema;
}
interface MySchemas {
validator: jsonschema.Validator;
initialized: boolean;
walk: Promise<NestedSchemas>;
schemas: NestedSchemas;
}
declare var _: MySchemas;
export = _;
当我尝试使用我的代码时,我看到以下弹出的内容:
感兴趣的是,它首先显示Schema
然后NestedSchemas
(虽然在界面中定义了另一种方式),并且它没有尝试解决它无论如何,因为它是一个字符串键。
我在这里做错了什么?
答案 0 :(得分:1)
您可以像这样简化问题: 这给出了警告:
interface NestedSchemas {
[key: string]: NestedSchemas | string;
}
const themas: NestedSchemas = {};
themas['0.1'].foo.bar.baz
虽然这不是:
interface NestedSchemas {
[key: string]: NestedSchemas;
}
const themas: NestedSchemas = {};
themas['0.1'].foo.bar.baz
这是因为打字稿不知道themas['0.1']
是NestedSchemas
还是string
类型。
(((themas['0.1'] as NestedSchemas).foo as NestedSchemas).bar as NestedSchemas).baz
(我承认,不是很优雅)
有关详细信息,请阅读https://www.typescriptlang.org/docs/handbook/advanced-types.html。