【发布时间】:2020-04-08 22:19:03
【问题描述】:
考虑以下接口/类型:
interface Ifc {
fieldA: string;
fieldB: number;
}
我想要一个可分配给非对象类型变量的类型,告诉 TypeScritp 如下:
嘿 TypeScript,这个类型是接口
Ifc中包含的所有类型中的一个单一类型
这给了我以下控制类型的方法:
// [[ ]] means placeholder
let oneFromIfc0: [[Type I can't figure out]] = 'Hey there' // It's ok, string is in Ifc type
let oneFromIfc1: [[Type I can't figure out]] = false // error, boolean does not conform to any field of Ifc
如果是对象,则可以使用映射的可选类型来解决:
type partialType = {
[k in keyof Ifc]?: Ifc[k];
}
这基本上指示 TypeScritp 执行以下操作:
嘿 TypeScript,取 Ifc 的任何字段名称,使其成为可选的。然后把这个字段类型复制到这个字段中。
但与我需要的相比,它有一些缺陷:
- 需要使用不具有标量值的对象(使用
o.fieldA而不是fieldA) - 允许将
Ifc的多个字段映射到新对象 - 字段名必须与
Ifc字段名一致
【问题讨论】:
标签: typescript