type SelectData = {
name?: boolean;
address?: boolean;
}
const selectData: SelectData = {
name: true
}
const untypedSelectData = {
name: true
}
如果我尝试做这样的事情,我希望打字稿抛出一个错误:
const selectData: SelectData = {
age: true
}
但我也希望 selectData 的类型与 untypedSelectData 相同(即 {name: boolean})?
答案 0 :(得分:2)
如果您想在编译时检查一个对象是否可分配给某个较弱的类型,同时还为其分配给的变量或常量保留更强的推断类型,您可以使用通用标识函数。
function checkData<T extends SelectData>(data: T): T {
return data;
}
// type is { name: true }
const selectData = checkData({
name: true
})
// error: object literal may only specify known properties
const errorData = checkData({
age: 23
})