roc*_*oco 0 typescript typescript-typings
无法想出一个简单的方法来表达标题,一个例子应该更清楚:
假设我有一个界面:
interface Vehicle {
color: string;
year: number;
}
Run Code Online (Sandbox Code Playgroud)
现在我有两个对象:
const FIRST = {
cars: {
a: {color: "red", year: "1980"},
b: {color: "blue", year: "1991"}
},
trucks: {
red_trucks: {
c: {color: "red", year: "1990"}
}
}
}
const SECOND = {
collection: {
new_cars: {
x: {color: "green", year: "2015"},
y: {color: "blue", year: "2019"}
}
}
}
Run Code Online (Sandbox Code Playgroud)
对象中键的名称和结构不同 - FIRSThascars->a, b和trucks->red_trucks- cwhile SECONDjust has collection->new_cars->x, y。假设有很多这样的对象,它们都有不同的键名。
但它们仍然有点相似,因为实际上对象只是存储Vehicles,但它碰巧嵌套了一些对象来做到这一点。
有没有办法在这里指定一个类型,类似于“我们不知道键,但每个键的值是另一个具有更多键的对象或” Vehicle?某种递归类型?
描述这一点的类型实际上是一个相当简单的映射类型:
type Tree<T> = {
[key: string]: T | Tree<T> | undefined
}
Run Code Online (Sandbox Code Playgroud)
我已经将其写为通用的,但T在您的情况下将是Vehicle. 对于对象的每个属性Tree,我们说该值是 a Vehicle、 anotherTree<Vehicle>或undefined。我之所以将其包括在内,undefined是因为在运行时您会假设并非每个属性都已定义。您应该检查您是否确实具有价值。
你的两个例子都可以分配给Tree<Vehicle>. 去游乐场看看吧。
| 归档时间: |
|
| 查看次数: |
677 次 |
| 最近记录: |