【发布时间】:2021-10-31 09:40:36
【问题描述】:
我有一个 JSON 文件,想在 typescript 中使用,但不太确定如何定义类型/接口。
它基本上定义了虚拟键盘的布局。所以它会有一个layoutName,然后每一行都会有一个名字。
布局名称(例如“默认”、“表情符号”)。我想成为一个可以是任何值的通用字符串,所以我在考虑记录类型。行名应该一致,但它们必须动态访问,所以我认为它们也应该是记录?
这是 JSON 文件中的一个示例。
{
"default": {
"row1": [
"1",
"2",
"3",
"4",
"5",
"6",
"7",
"8",
"9",
"0",
"-",
"=",
"Backspace"
],
"row1_shift": [
"!",
"@",
"#",
"$",
"%",
"^",
"&",
"*",
"(",
")",
"_",
"+",
"Backspace"
],
},
"emoji": {
"row1" : []
}
谢谢
【问题讨论】:
-
所有行都是always required 还是optional?你能说出行名是什么吗?
-
它们在技术上是可选的,但我认为“可选”意味着“可以是空集合”。我目前有
interface KeyboardLayout { row1: string[]; row1_shift: string[]; row2: string[]; row2_shift: string[]; row3: string[]; row3_shift: string[]; row4: string[]; row4_shift: string[]; row5: string[]; row5_shift: string[]; } interface KeyboardLayouts { default: KeyboardLayout; ... }虽然可能有任意数量的布局,而不仅仅是“默认”。行和布局名称都需要能够动态访问。 -
你能解释一下你所说的“动态”是什么意思吗?也许有一个minimal reproducible example 你会如何使用它?
-
可以这样称呼:
let currentRow = Application.keyboard[layout]["row" + index + modifier]其中index = number,修饰符类似于“_shift”。一个 getProperty 函数,它可能是一个更好的解决方案,或者是一个类型,以便我可以简单地使用[key]访问所有内容 -
那么like this?看看编译器如何判断模板字面量是正确的类型来索引到
virtualKeyboard[layout]
标签: typescript