typescript - 两个属性名称之一
问题描述
type B = {
c: string
}
type T = {
a: string
b: B
}
我想让 T2 看起来像
type T2 = {
a: string
['b' or 'prefixB']: B
}
基本上我希望 T 具有 a 和 b 或 prefixB 属性 - 你知道如何以简单的方式做到这一点吗?像两个之一
解决方案
type Aa = {a: string}
type T2 = Aa & ({prefixB: string} | {b: string})
const foo: T2 = {
a: "a",
b: "b"
}
foo.a // a
foo.b // b
foo.prefixB // Property 'prefixB' does not exist
const foo2: T2 = {
a: "a",
prefixB: "prefixB"
}
foo2.a // string
foo2.prefixB // prefixB
foo2.b // Property 'b' does not exist
我认为这是工作
更新
type Aa = {a: string}
type B = {
c: string
}
type T2 = Aa & ({prefixB: B} | {b: B})
const foo: T2 = {
a: "a",
b: {
c: "obj"
},
}
foo.a // a
foo.b // { c: "obj" }
foo.prefixB // Property 'prefixB' does not exist
const foo2: T2 = {
a: "a",
prefixB: {
c: "obj"
}
}
foo2.a // a
foo2.prefixB // { c: "obj" }
foo2.b // Property 'b' does not exist
const foo3: T2 = {
a: "a",
prefixB: {
c: "obj"
},
b: {
c: "obj"
}
}
foo3.a // a
foo3.prefixB // Property 'prefixB' does not exist
foo3.b // Property 'b' does not exist
推荐阅读
- reactjs - 如何获取 React JS 中提交的材料 UI 输入的长度?
- database - BASE 是否等于 READ UNCOMMITTED?
- android - 模块已导入 kapt,但无法识别类
- javascript - 使用 uk-filter-control 在组中搜索多个属性
- flutter - 是否可以在不使用 gridview 的情况下用包装小部件包装 Listview.builder
- for-loop - FOR 循环中不兼容的字段符号类型
- javascript - npm 包内的配置如何根据环境导出,需要 tree-shaking?
- jenkins - Jenkins 管道 - 如何根据定义的参数运行阶段
- elasticsearch - 如何在 elasticsearch DSL 查询中过滤
- css - 省略号不适用于带有 flex 的引导程序