如何解决在联合上分配通用类型
TS中是否有一种方法可以通过联合“分布”泛型?
type Container<A> = { value: A };
type Containers<string | number> = Container<string> | Container<number>
(假设我们从上下文中知道何时应用Containers
与Container
)
解决方法
令人惊讶的是,类型推断将为您做到这一点:
type Container<T> = { value: T }
type Containers<T> = T extends infer A ? Container<A> : never;
编译器足够聪明,可以将它们全部解开:
type C = Containers<string | number | {x: number} | {z: string} | boolean>
类型C
扩展了以下方式:
type C = Container<string> |
Container<number> |
Container<false> |
Container<true> |
Container<{
x: number;
}> |
Container<{
z: string;
}>
,
鉴于您的示例代码,我认为您想定义一个约束为类型联合的泛型类型。其中之一应该适合您的账单。
do {
let decoder = JSONDecoder()
decoder.dateDecodingStrategy = .iso8601
let welcome = try decoder.decode(Welcome.self,from: data)
completion(welcome,nil)
} catch let jsonError {
print("Failed to decode JSON: \(jsonError)")
completion(nil,jsonError)
}
还要注意,Spread是JavaScript中的语法规则。在您的问题中,它的用法令人困惑。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。