文档原文“默认情况下,每个类型都是可以为空的 —— 意味着所有的标量类型都可以返回 null。使用感叹号可以标记一个类型不可为空,如 String! 表示非空字符串。”
意味着字符串""是合法的(实验后确实也是这样),那么验证""这种“非空字符串”只能在 resolver 里面验证么?
GraphQL 的非空字符串貌似跟我平时理解的非空字符串有差异啊……难道不是 Null 和""都是空么?
1
SilentDepth 2019-08-20 17:26:37 +08:00
「这种“非空字符串”只能在 resolver 里面验证么?」
是的。 「难道不是 Null 和""都是空么?」 null 是 null,空字符串是空字符串,它们可以表达不同的业务含义。不要被 JS 的隐式类型转换误导: null == "" // true null === "" // false |
2
wednesdayco OP @SilentDepth 同理还有空数组,空对象- -对吧
|
3
SilentDepth 2019-08-20 18:25:26 +08:00
@wednesdayco #2 是的,还有 undefined、NaN
|
4
jmc891205 2019-08-20 18:29:33 +08:00
null 是虚无
""才是空字符串 |
5
no1xsyzy 2019-08-20 20:02:55 +08:00
此空非彼空
Python 里面 None 类型都不一样,根本不是字符串 |
6
TangMonk 2019-08-20 20:03:59 +08:00
此空非彼空,一切皆空
|
7
StarkWhite 2019-08-20 20:44:05 +08:00
null 和 "" 本来就不是一个含义,在很多语言都不一样的,只是 js,php 等动态语言会自动转换而已。
GraphQL 很严谨的,业务上也应该区分开来,resolver 里校验 "" 是可以的。 |
8
Zink99 2019-08-21 09:51:07 +08:00
身为前端我一直理解 ID! String! 这类为必传参数
所以当我必须传一个字符串,但是我又没有实际值可传的时候,传一个 "" 感觉是很自然的事。。。 |
9
wednesdayco OP @Zink99 gql 中文文档写的是非空值= =,之后翻了下英文文档写的是 Non-Null 这就合理多了 = = 。
|
10
StarkWhite 2019-08-21 12:10:04 +08:00
@wednesdayco 那就是翻译问题了
|
11
StarkWhite 2019-08-21 12:10:52 +08:00
@Zink99 机智。原来 v 站能发狗头表情哈 ,为啥我复制粘贴就是空的呢?
|
12
Zink99 2019-08-21 12:12:25 +08:00
@StarkWhite #11 插件:v2ex plus
|
13
StarkWhite 2019-08-21 12:31:38 +08:00
@Zink99 原来这样啊,thx
|
14
SilentDepth 2019-08-21 17:48:48 +08:00
@Zink99 #8
如果设定上必须传一个值,但实际上没有值可传,那一定是逻辑实现有问题,或者业务实现有问题。传 "" 是一个偷懒但危险的办法。 --- @wednesdayco #9 这是一个习惯问题。「空值」就应当指 null,「空字符串」(或简称「空串」)才是指 ""。 |
15
Zink99 2019-08-21 17:58:53 +08:00
@SilentDepth #14 产品用屁股想出来的需求,能咋办嘛
|
16
SilentDepth 2019-08-21 18:00:10 +08:00
@Zink99 #15 打死他
|
17
Zink99 2019-08-21 18:06:59 +08:00
@SilentDepth #16 老哥,看了你的回复,你阔以带带我这个菜鸡前端吗(认真脸
|