【问题标题】:Typescript type to object literal打字稿类型到对象文字
【发布时间】:2021-09-10 02:05:00
【问题描述】:
type SelectData = {
  name?: boolean;
  address?: boolean;
}

const selectData: SelectData = {
  name: true
}

const untypedSelectData = {
  name: true
}

如果我尝试执行以下操作,我希望 typescript 抛出错误:

const selectData: SelectData = {
  age: true
}

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

【问题讨论】:

    标签: typescript


    【解决方案1】:

    如果您想在编译时检查一个对象是否可以分配给一些较弱的类型,同时还为分配给它的变量或常量保留一个更强的推断类型,您可以使用泛型标识函数。

    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

    正如@jcalz 所说,在官方 GitHub 跟踪器上有一个feature request 可以在不添加额外函数声明和函数调用的情况下执行此操作,但目前不存在这样的功能。

    【讨论】:

    • 您可能还想提供指向microsoft/TypeScript#7481 的链接,该行为的(可能)规范功能请求仅在类型级别得到支持(而不是在运行时需要标识函数)。
    猜你喜欢
    • 1970-01-01
    • 2023-03-07
    • 2018-09-15
    • 2020-06-10
    • 1970-01-01
    • 2019-03-22
    • 2019-01-16
    相关资源
    最近更新 更多