通过TypeScript中的键获取Object类型的值



我有一个object类型的变量

let ref_schema_data: object

ref_schema_data的值

{ '$schema': 'http://json-schema.org/draft-07/schema',
'$id': 'tc_io_schema_top.json',
allOf:
[ { type: 'object', required: [Array], properties: [Object] } ] }

这就是我为ref_schema_data赋值的方式

function load_schema(filename: string, filepath: string):object {
let json_data = fs.readFileSync(path.join(filepath, filename),'utf8')
return JSON.parse(json_data)
}

我发现很难通过键从对象中获得任何值。例如,我需要获得ref_schema_data["$id"]。但这不起作用。

我犯的错误是什么。

object类型很少有用。它没有定义对象的任何属性,因此不允许访问任何属性。相反,定义一个与对象形状匹配的类型。例如:

interface Thingy {
type: string;
required: something[];   // I don't know from the question what you have in this array
properties: something[]; // Or this one
}
interface SchemaData {
$schema: "http://json-schema.org/draft-07/schema", // A string literal type
$id: string;
allOf: Thingy[]; // An array type
}

然后,如果将SchemaData指定为ref_schema_data的类型,则可以访问对象中的属性。(显然,您必须填写上面的something占位符。(

手册中有更多内容。


在你的评论中说:

唯一的问题是我的模式属性不是恒定的,它会变化。所以我觉得很难有相同的接口。我的要求基本上是读取JSON对象,并在存在的情况下获取一些密钥的值

在这种情况下,您的接口使用索引签名(允许任何属性名称(,可能允许值为任何值(any(:

interface SchemaData {
[key: string]: any;
}

上面写着";SchemaData是一个以任何字符串作为属性名称的对象,其中所有属性都具有任何类型"它实际上不提供任何类型的安全性,因为在处理你不知道形状的数据时,你不能。:-(

TypeScript游乐场上的实时示例

或者您可以只在ref_schema_data上使用any

TypeScript游乐场上的实时示例

相关内容

最新更新