我个人觉得三目还可以,但前提是格式化必须严格做到
xxxx
? aaaa
: bbbb
这种格式,这样的话两三层以内都完全不会有歧义,各个分支都看得比较清楚
但是第一次看到包含各种奇奇怪怪格式的三目的类型声明的时候还是不免骂一句,这写的什么寄吧
1
WuSiYu 2022-04-29 02:30:54 +08:00 via iPhone
三目套三目写复杂逻辑的一律认为有大病
(除非是 verilog ,doge ) |
2
TWorldIsNButThis OP @WuSiYu 三目是 typescript 类型语言的核心语法 🐶
|
3
yuzo555 2022-04-29 02:41:40 +08:00
只要加了括号,编辑器能主动高亮匹配的括号,我没什么意见。
|
4
liuidetmks 2022-04-29 06:14:29 +08:00 via iPhone
if a return a
else return b 你不觉得麻烦? 还有,不是一些框架 只能接受 表达式吗 ,vue 里面 |
5
golangLover 2022-04-29 08:07:47 +08:00 via Android
typescript 的程序员写代码都有临深为高的感觉
|
6
Lighfer 2022-04-29 08:26:34 +08:00
@liuidetmks return a || b
|
7
djs 2022-04-29 08:47:45 +08:00 via iPhone
最近参考人家的写了个类型生命,长见识了…
|
8
focuxin 2022-04-29 08:53:14 +08:00
const {name} = this.options || {};
|
9
superfatboy 2022-04-29 09:36:01 +08:00
天天写 ts ,天天用三母,爽的一批,开始学 go 了,发现没三目,很难受
|
10
ZE3kr 2022-04-29 09:38:30 +08:00 via iPhone
is_a ? b : is_c ? d : is _e ? f : g
完美 |
11
nothingistrue 2022-04-29 09:43:17 +08:00
Java 里面,三目运算符不是用来赋值的,或者赋值加三目表达式加起来超过一行或换行,是要被打死的。
三目运算符当逻辑操作,还有逻辑运算符里面参杂赋值操作( a is not null && a=2 这种),在脚本语言,还有追求最少操作(并忽略可读性)的算法里面,用得还是很多的。但我不相信 typescript 会把这当核心用法。 |
12
CodeCodeStudy 2022-04-29 09:45:57 +08:00
TypeScript 本来就不是一门独立的语言,TypeScript 的三目就是 JavaScript 的三目
|
13
sunhelter 2022-04-29 09:49:51 +08:00
var a = b switch { 1="A",2="B",_="" };
完美 |
14
zjccc 2022-04-29 09:55:41 +08:00 3
只是 ts 类型声明也只能用三目了吧,上面的朋友没理解这是啥玩意,贴个膈应人的
```typescript type IsEqual<A, B> = (<T>() => T extends A ? 1 : 2) extends <T1>() => T1 extends B ? 1 : 2 ? true : false ``` |
15
irisdev 2022-04-29 10:02:45 +08:00
楼主说的是这种
race<T>(values: readonly T[]): Promise<T extends PromiseLike<infer U> ? U : T>; |
16
marcong95 2022-04-29 10:10:47 +08:00
那你对于那种 xxx ? 1 : 0 这种你也要拆 3 行写吗?
|
17
statumer 2022-04-29 10:24:03 +08:00 via iPhone
那你去给 Typescript 贡献个 constexpr 吧。
类型声明这样的 DSL 不用函数式类型体操还想怎样 |
18
libook 2022-04-29 11:10:36 +08:00
代码风格限定协作群体就好了,没必要要求全网所有人按照统一风格来写,否则不如换其他本身格式要求高的语言。
每个团队的人员习惯和水平不一样,需要团队内部对代码风格达成一致,然后以制度和 Lint 规则的形式来约束,确保大家高效协作就好。 |
19
AyaseEri 2022-04-29 11:13:28 +08:00
type Foo<T> = T extends Foo ? T extends Bar ? Omit<T, "options"> : Partial<T> : T
|
20
learningman 2022-04-29 11:24:46 +08:00
ts 的类型声明说不定是编译出来的,给 language-server 看的。。。
|
21
ccraohng 2022-04-29 11:38:47 +08:00
ts 是越智能越复杂
可以看 stitches 的类型。。 |
22
enchilada2020 2022-04-29 12:42:11 +08:00 via Android
没办法啊 类型操作里只能用表达式 表达式里用来表示 if else 的就是三目运算 别说 if else 了 连逻辑运算都没有 就只能一层一层套
|
23
hujun528 2022-04-29 13:02:33 +08:00
@superfatboy 用泛型 自己写个三目 方法
|
24
aguesuka 2022-04-29 13:14:20 +08:00
这不是三目运算, 这是 Conditional Types
|
25
wolfie 2022-04-29 14:25:03 +08:00
没三目,代码会丑好多。
|
26
zooeymango 2022-04-29 14:32:08 +08:00
哈哈哈, 有时候写 ts 冒号问号最后写的我自己都晕了
|
27
chenmobuys 2022-04-29 14:50:57 +08:00
js 本来就乱,ts 还要兼容 js ,又要开发一套新的语法,乱上加乱。java 的类型更清晰一点。
|
28
stimw 2022-04-29 15:56:21 +08:00
要这样说 pythonic 其实也有很多奇怪(抄近路)的写法,第一眼还看不懂。
同理 c++ |
29
mosade 2022-04-30 00:34:45 +08:00
众所周知,TypeScript 拥有一个图灵完备的类型系统[手动狗头]
https://github.com/type-challenges/type-challenges/blob/main/questions/08804-hard-two-sum/README.md |