如何使用变体选项在脚本中键入函数参数?

Posted

技术标签:

【中文标题】如何使用变体选项在脚本中键入函数参数?【英文标题】:How to use a variant option to type function parameters in rescript? 【发布时间】:2021-04-14 08:56:48 【问题描述】:

我想做以下事情。但似乎我无法使用变体选项之一键入函数参数。在脚本中实现这一目标的正确方法是什么?

Here is a playground

  type subject = Math | History

  type person =
    | Teacher(firstName: string, subject: subject)
    | Student(firstName: string)
  
  let hasSameNameThanTeacher = (
    ~teacher: Teacher, // syntax error here
    ~student: Person,
  ) => 
    teacher.firstName == student.firstName
  

【问题讨论】:

【参考方案1】:

TeacherStudent 本身不是类型,而是构造 person 类型值的构造函数。如果您希望它们具有不同的类型,则必须明确说明:

module University = 
  type subject = Math | History

  type teacher = firstName: string, subject: subject
  type student = firstName: string
  type person =
    | Teacher(teacher)
    | Student(student)
  
  let hasSameNameThanTeacher = (
    ~teacher: teacher,
    ~student: student,
  ) => 
    teacher.firstName == student.firstName
  

【讨论】:

以上是关于如何使用变体选项在脚本中键入函数参数?的主要内容,如果未能解决你的问题,请参考以下文章

如何将函数参数键入为本机函数

如何在 TypeScript 3+ 中正确键入通用元组剩余参数?

样式化组件 + Typescript:如何键入 css 辅助函数?

如何在 Application.Left 函数(需要范围或字符串)中使用拆分函数(变体)的结果?

如何键入提示函数的可选返回参数? [复制]

如何键入一个以可调用对象及其参数作为参数的函数 - 例如函数的数值积分?