不懂就问 TypeScript 可以生成这样的类型吗

2022-03-07 17:10:36 +08:00
 f360family123

1798 次点击
所在节点    TypeScript
11 条回复
noe132
2022-03-07 17:19:05 +08:00
你这已经是最简洁的写法了
f360family123
2022-03-07 17:21:09 +08:00
@noe132 可是继续加 SearchType 不就很难受了
anjianshi
2022-03-07 17:24:54 +08:00
确实是最简洁的写法了...
anjianshi
2022-03-07 17:26:28 +08:00
如果新加的 type 不需要 xSearchItems ,可以这样合并:

```typescript
type Column = { xSearchType: 'input' | 'other' | 'other-other' }
| { xSearchType: 'select', xSearchItems: any[] }
```
zhy0216
2022-03-07 17:29:28 +08:00
应该可以用 conditional type
xiaojie668329
2022-03-07 20:15:16 +08:00
```typescript

type column<T> = T extends 'select' ? { xSearchType: T, xSearchItems: any[] } : { xSearchType: T }

let c: column<'select'> = {
xSearchType: 'select',
xSearchItems: [],
}

let n: column<'input'> = {
xSearchType: 'input',
}


```

暂时想到这样写,不过感觉还有更简洁的方法。
zhihaofans
2022-03-07 20:29:41 +08:00
没学过 ts 的好奇问一下,参数名前面都带个 x 是有什么用途
f360family123
2022-03-07 20:30:00 +08:00
@zhy0216 看了下文档,没想出来怎么实现
f360family123
2022-03-07 20:30:30 +08:00
@zhihaofans 我随手写的..,跟 ts 没关系
f360family123
2022-03-07 20:32:34 +08:00
@xiaojie668329 要传泛型感觉也有点难受
zhy0216
2022-03-07 20:54:52 +08:00
@f360family123 我也是 6 楼的写法
xSearchType 的类型应该是有限的吧?你全部定义出来 然后一一对应
写起来是麻烦点 之后维护会简单些的 别人一看就知道怎么回事

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/838653

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX