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