Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何在接口内链接多个类型_Typescript_Keyof - Fatal编程技术网

Typescript 如何在接口内链接多个类型

Typescript 如何在接口内链接多个类型,typescript,keyof,Typescript,Keyof,不确定这是否可行,但这与我一直在绞尽脑汁的keyof有关 我目前有这个界面: interface Column<T> { header: string; field: keyof T; format?: (value: any) => string; } 接口列{ 标题:字符串; 字段:KEYOFT; 格式?:(值:任意)=>字符串; } 它的第一个用途是在给定对象和列的列表的情况下创建呈现表的内容 const rows = [{name: 'Alice', a

不确定这是否可行,但这与我一直在绞尽脑汁的
keyof
有关

我目前有这个界面:

interface Column<T> {
  header: string;
  field: keyof T;
  format?: (value: any) => string;
}
接口列{
标题:字符串;
字段:KEYOFT;
格式?:(值:任意)=>字符串;
}
它的第一个用途是在给定对象和列的列表的情况下创建呈现表的内容

const rows = [{name: 'Alice', age: 18}, {name: 'Bob', age: 12}];

type Row = typeof rows[0];

const columns: Column<Row>[] = [
  {
    header: 'Name',
    field: 'name',
    format: value => value.toUpperCase(),
  },
  {
    header: 'Age',
    field: 'age',
    format: value => value.toLocaleString(),
  },
];

const renderTable = <T>(rows: T[], columns: Columns<T>[]) { ... }
renderTable(rows, columns);
const rows=[{name:'Alice',年龄:18},{name:'Bob',年龄:12}];
类型行=类型行[0];
常量列:列[]=[
{
标题:“名称”,
字段:“名称”,
格式:value=>value.toUpperCase(),
},
{
标题:“年龄”,
字段:“年龄”,
格式:value=>value.toLocalString(),
},
];
常量renderTable=(行:T[],列:columns[]){…}
可渲染(行、列);
格式
函数中,有没有办法去掉这里的
任何
类型?要以某种方式将
字段的
键T
格式的
链接起来?即,对于第一列,值应为字符串,而对于第二列,值应为数字



(我知道手动打印这些文件很容易,但也会在这个表中添加一些自动魔法的东西,它将使用
字段
格式

一种方法是依靠TypeScript的

这将“映射”通过传递的通用(
)中的每个键(
key-in-keyof

然后,对于每个
键(例如:
名称
年龄
管理员
),我们将指定一个您用属性
标题
字段
格式
概括的形状对象

但是,由于我们现在知道我们正在使用一个特定的键(例如:
age
),因此我们可以使用
key
引用此映射类型中的
age
,并使用
行[key]
引用
age
的类型(
number

最后,您不需要带有嵌套对象的键,您只需要对象,这样我们就可以使用
[keyof Row]
有效地“提取”这些值,查找
“age”|“name”|“admin”的所有值
剩下的是所有可能列的联合类型,其中
字段
格式
键入正确

类型列={
[输入行的键]:{
标题:字符串;
字段:键,
格式?:(值:行[键]=>字符串;
}
}[世界其他地区]
const rows=[{name:'Alice',年龄:18岁,管理员:true},{name:'Bob',年龄:12岁,管理员:false}];
类型行=类型行[0];
常量列:列[]=[
{
标题:“名称”,
字段:“名称”,
格式:value=>value.toUpperCase(),//值:字符串
},
{
标题:“年龄”,
字段:“年龄”,
格式:value=>value.toLocalString(),//值:number
},
{
标题:“Admin”,
字段:“admin”,
格式:value=>value.toString(),//值:布尔值
},
];

一种方法是依靠TypeScript的

这将“映射”通过传递的通用(
)中的每个键(
key-in-keyof

然后,对于每个
键(例如:
名称
年龄
管理员
),我们将指定一个您用属性
标题
字段
格式
概括的形状对象

但是,由于我们现在知道我们正在使用一个特定的键(例如:
age
),因此我们可以使用
key
引用此映射类型中的
age
,并使用
行[key]
引用
age
的类型(
number

最后,您不需要带有嵌套对象的键,您只需要对象,这样我们就可以使用
[keyof Row]
有效地“提取”这些值,查找
“age”|“name”|“admin”的所有值
剩下的是所有可能列的联合类型,其中
字段
格式
键入正确

类型列={
[输入行的键]:{
标题:字符串;
字段:键,
格式?:(值:行[键]=>字符串;
}
}[世界其他地区]
const rows=[{name:'Alice',年龄:18岁,管理员:true},{name:'Bob',年龄:12岁,管理员:false}];
类型行=类型行[0];
常量列:列[]=[
{
标题:“名称”,
字段:“名称”,
格式:value=>value.toUpperCase(),//值:字符串
},
{
标题:“年龄”,
字段:“年龄”,
格式:value=>value.toLocalString(),//值:number
},
{
标题:“Admin”,
字段:“admin”,
格式:value=>value.toString(),//值:布尔值
},
];

你以几秒之差击败了我:p。你可能应该添加一些解释,尽管你以几秒之差击败了我:p。但是你可能应该添加一些解释