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

Typescript 类型脚本:一个类型可以在它自己的键上参数化吗?,typescript,Typescript,我想创建一个类型,其中的值是对其自身属性的引用。大致如下: 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 }; 在不分解类型或预先明确指定属性的情况下,这是可能的吗?没有具体的类型T有这样

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

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
};
在不分解类型或预先明确指定属性的情况下,这是可能的吗?

没有具体的类型
T
有这样的定义,但您可以将
T
表示为。这意味着您不需要像
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"
});
const asT=(t:t)=>t;
常数t=asT({
a:“b”,
b:“a”,
c:“d”//error!//“d”不可分配给“a”|“b”|“c”
});
这会使您准确地得到预期的错误。好吧,希望这会有帮助;祝你好运