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。但是你可能应该添加一些解释