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

类型脚本:一个类型可以用它自己的键参数化吗?

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

    我想创建一个类型,其中的值是对其自身属性的引用。大致如下:

    type T = {[k:string]: keyof *a reference to this type*}; // 
    

    所以你可以写这样的东西:

    const t:T = {
      a:"b", // valid
      b:"a", // valid
      c:"d" // invalid since "d" is not a property of t
    };
    

    在不中断类型或不预先显式指定属性的情况下,这是否可能?

    1 回复  |  直到 5 年前
        1
  •  1
  •   jcalz    5 年前

    混凝土 类型 T 有这样的定义,但是你可以 T型 作为一个 generic constraint . 这意味着不要像 const t: T = ... ,您需要使用一个通用的helper函数并将其调用为 const t = asT(...) . 这样地:

    const asT = <T extends Record<keyof T, keyof T>>(t: T) => t;
    
    const t = asT({
      a: "b",
      b: "a",
      c: "d" // error! // "d" not assignable to "a"|"b"|"c"
    });
    

    这就给了你一个错误,准确地说是你所期望的。好吧,希望能帮上忙;祝你好运!

    Playground link to code