一个同事试图写一个方法来返回T::Struct
中列出的字段的子集,我们想知道是否有一个类似于Typescript的Pick
的Sorbet,只有在类型定义中显式提到的对象的属性被保留。
没有。一般来说,Sorbet更倾向于名义类型,而TypeScript更倾向于结构类型。
对于Sorbet,您将使用接口来声明定义抽象的关键部分。例如,
module Person
extend T::Sig
extend T::Helpers
sig { returns(String) }
def name; end
sig { returns(Date) }
def dateOfBirth; end
end
class Employee < T::Struct
include Person
const :name, String
const :dateOfBirth, String
const :department, String
const :salary, Integer
end
与Pick
(以及一般的结构类型)相比,使用命名类型意味着您可以使用它们的名称来传达目的和含义。实现Person
接口的对象具有非常特定的语义含义,而不是一个由int、日期和字符串组成的桶。