代码之家  ›  专栏  ›  技术社区  ›  Ilja

键入具有多个“key:require()”项的对象,将所有requires设置为字符串

  •  0
  • Ilja  · 技术社区  · 6 年前

    我有这样一个对象,它有多个键和值(需要)。

    export const BACKGROUND_IMGS = {
      fire: require('$images/backgrounds/background_fire.jpg')
    };
    

    Typescript当前将其类型继承为

    const BACKGROUND_IMGS: {
        fire: any;
    }
    

    有可能改变吗 any 变成一个 string ,不附加 as string

    1 回复  |  直到 6 年前
        1
  •  1
  •   eol    6 年前

    您可以显式定义将成为 BACKGROUND_IMGS 关键点和定义 Record 其中:

    type YourElement = "fire" | "water";
    
    export const BACKGROUND_IMGS: Record<YourElement, string> = {
      fire: require("..."),
      water: require("...")
    };
    

    为了避免重复使用密钥,另一种方法是使用 keyof 要使用objects键创建新类型并使用该键声明新类型,请执行以下操作:

    const BACKGROUND_IMGS = {
      fire: require(".."),
      water: require("..")
    };
    
    type ImageKeys = keyof typeof BACKGROUND_IMGS;
    export const BACKGROUND_IMGS_TYPED = BACKGROUND_IMGS as Record<ImageKeys,string>;
    
    推荐文章