打字稿:限制对象值的类型

Typescript: limiting types in object values

我正在尝试创建一个大对象,其值仅限于 3 种类型:TextureGeometryScript

我的对象看起来像这样:

var assets: Assets = {
    sky: <Texture>,
    ground: <Texture>,
    city: <Geometry>,
    people: <Script>,
    cars: <Script>,
    sun: <Circle> // <--This should fail because it's not one of the 3 types
    //...
}

如何声明 Assets 接口,使每个键值对中的值仅限于这 3 种类型?我尝试从以下开始:

interface Assets{
    key: Texture | Geometry | Script;
}

但是当我分配

时它就中断了
this.assets = {sky: new Texture()}

因为它只需要 key 而不是 sky。有什么方法可以在不将对象嵌套在对象中的情况下实现这一点?

怎么样:

type Assets = {
    [key: string]: Texture | Geometry | Script;
}

该类型将允许您请求的一种类型的字符串键和值。

有关该主题的更多信息:Indexable Types