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

为什么Typescript不将对象键缩小到字符串

  •  1
  • Mattia  · 技术社区  · 5 年前

    如果我定义这样的类型:

    type O = { [k: string]: any };
    

    我希望钥匙在 O 将缩小为类型 string . 但是,如果我定义:

    type KO = keyof O;
    

    KO 评估为 string|number . 这是为什么?我不是明确地缩小了范围吗 O型 的钥匙 一串 通过陈述 [k:string] 在我的定义中 O型

    1 回复  |  直到 5 年前
        1
  •  2
  •   Titian Cernicova-Dragomir    5 年前

    如果你有 string 索引,自动获取 number 索引器以及 docs :

    如果你有一种 一串 索引签名, keyof T string | number (不仅仅是字符串,因为在JavaScript中,可以通过使用 strings ( object['42'] )或者 numbers ( object[42] )).