An exception has occurred, use %tb to see the full traceback.
TypeError: handle_get_file_code() got an unexpected keyword argument 'save_all'
版本:3.9.6
我想限制tsc
的值。
在我的界面getColDict()
中,键是任何字符串,值必须是ColDict<T>
,在我的情况下,T
是类型T
。
我的代码在这里:
Column
我得到了错误:
interface ColDict<T> {
[i: string]: T;
}
function getColDict<T>(): ColDict<T> {
return {
id: { title: 'ID', dataIndex: 'id' }, // **constraint here**
name: { title: 'NAME', dataIndex: 'name' }, // **constraint here**
xxx: { title: 'YYY', dataIndex: 'zzz' }, // **constraint here**
};
}
// =====================================
export type Column = {
title: string;
dataIndex: string;
width: number;
};
const colDict = getColDict<Column>();
const columns: Column[] = [
{ ...colDict.id, width: 80 },
{ ...colDict.name, width: 80 },
{ ...colDict.xxx, width: 80 },
];
console.log('columns: ', columns);
我该怎么做?
答案 0 :(得分:1)
我可以看到您正在尝试做什么。有几个问题。首先,getColDict()
不应是通用的,因为实现中的任何内容都不取决于通用参数。您不会以这种方式强制执行约束。相反,您应该显式定义getColDict()
生成的列接口,如果尝试将返回值分配给其他类型的对象,则TS将给您一个错误。看起来像这样:
interface ColDict<T> {
[i: string]: T;
}
interface ColumnType {
title: string
dataIndex: string
}
function getColDict(): ColDict<ColumnType> {
return {
id: { title: 'ID', dataIndex: 'id' }, // **constraint here**
name: { title: 'NAME', dataIndex: 'name' }, // **constraint here**
xxx: { title: 'YYY', dataIndex: 'zzz' }, // **constraint here**
};
}
// =====================================
export type Column = {
title: string;
dataIndex: string;
width: number;
};
const colDict: ColDict<Column> = getColDict(); // Error, Property 'width' is missing in type 'ColumnType' but required in type 'Column'.