打字稿类型到对象文字

时间:2021-02-11 03:16:58

标签: typescript

type SelectData = {
  name?: boolean;
  address?: boolean;
}

const selectData: SelectData = {
  name: true
}

const untypedSelectData = {
  name: true
}

如果我尝试做这样的事情,我希望打字稿抛出一个错误:

const selectData: SelectData = {
  age: true
}

但我也希望 selectData 的类型与 untypedSelectData 相同(即 {name: boolean})?

1 个答案:

答案 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
})

Playground Link