Type system
表达式的输入的参数以及他们的结果值,使用如下一组types:boolean、string、number、colr、arrays。更进一步来讲,表达式是type安全的:每个表达式都有确定的结果type和需要的参数types,并且sdk证明了表达式的结果type是适合上下文使用的。例如:在filter属性中一个表达式的结果类型必须是boolean,而+运算符的参数必须是数字。
当处理要素数据时,要素集属性值的类型SDK通常不能提前知道。为了保证类型安全,当计算一个表达式时,sdk将会检查属性值是否适合上下文环境。例如:如果在circle-color属性中使用表达式["get", "feature-color"],sdk将会验证每一个要素的feature-color值是否是一个代表颜色的值。如果检查失败,将会报错且会使用默认值代替。
在大多数情况下,检查验证都是在需要时候自动执行。然而,在一些确定的场景,sdk可能不能根据上下文自动确定结果值类型,例如:表达式["<", ["get", "a"], ["get", "b"]]并不明确表示是比较字符串还是数值。在类似这种情况下,你可以使用type断言表达式操作符来表明表达式的结果类型如["<", ["number", ["get", "a"]], ["number", ["get", "b"]]]。类型断言检查要素数据是否匹配表达式结果。如果检查失败,表达式会回滚使用默认值。断言操作符有:array、boolean、number和string。
表达式只有一种自动转换:data表达式用于颜色表达的时候会将代表颜色的字符串自动转换为颜色的值。在其余任何情况下,如果你想转换两种类型,你必须使用转换操作符来实现: to-boolean
, to-number
, to-string
, or to-color。例如:如果你有一个用字符串形式保存数值的要素属性,且你想用这些数值而不是字符串,你可以用这个表达式转换
["to-number", ["get", "property-name"]]。
Expression reference
这个章节的表达式主要用于测试和转换两种不同的数据类型如string、numbers和boolean值。
通常情况下,这些测试和转换是不必要的,但是他们在一些表达式结果很模糊的情况中是很需要的。他们在要素集数据类型不确定时显得很重要。例如:你可以使用to-number来确保类似“1.5”的数据会被当做数值类型使用。
断言输入是一个数列(或者更具体的子类型或长度),如果当输入表达式变化了,且变化的不是断言的类型,这个断言就会使这个表达式失败。
["array", value]: array
["array", type: "string" | "number" | "boolean", value]: array<type>
["array",
type: "string" | "number" | "boolean",
N: number (literal),
value
]: array<type, N>
断言输入值是布尔类型,如果提供了多个值,依次计算每个值直到获取到布尔值,如果输入值没有布尔类型,则报错。
["boolean", value]: boolean
["boolean", value, fallback: value, fallback: value, ...]: boolean
在混合使用txt文本中返回包含注释在内的格式化txt文本。如果设置了,text-font参数将使用layout属性的根值覆盖字体,font-scale参数将指定与text-size相关的范围要素。
["format",
input_1: string, options_1: { "font-scale": number, "text-font": array<string> },
...,
input_n: string, options_n: { "font-scale": number, "text-font": array<string> }
]: formatted
提供一个原意的对象组或数组
["literal", [...] (JSON array literal)]: array<T, N>
["literal", {...} (JSON object literal)]: Object
断言输入值是一个数值,如果提供了多个值,每一个都会计算直到能够获取到一个数值,如果输入值没有数值,则报错。
["number", value]: number
["number", value, fallback: value, fallback: value, ...]: number
断言输入值是一个对象,如果提供了多个输入,每一个都会被计算直到获取一个对象,如果输入值没有对象,表达式会报错。
["object", value]: object
["object", value, fallback: value, fallback: value, ...]: object
同上,断言是一个字符串,如果提供了多个输入,每一个都会被计算直到获取一个字符串,如果输入值没有字符串,表达式会报错。
["string", value]: string
["string", value, fallback: value, fallback: value, ...]: string
将输入值转换为布尔值,当输入为空字符串、0、false、null或者NAN时,返回false,否则都返回true。
["to-boolean", value]: boolean
将输入值转换为颜色,如果输入多个值,每个输入都会被转换直到获取到一个颜色,如果转换获取不到颜色,则表达式报错。
["to-color", value, fallback: value, fallback: value, ...]: color
将输入值转换为数字,如果可以的话。如果输入值为null或者false,结果是0。如果输入是true,则结果为1。如果输入为一个字符串,如果字符串表达的是数字,则转换为对应的数值。如果提供了多个值,则转换每个值直到获取number值,如果没有输入能被转成number,表达式报错。
["to-number", value, fallback: value, fallback: value, ...]: number
将输入值转换成字符串,如果输入为null,结果为“”。如果输入为布尔值,结果为“true”或“false”。如果输入为数字,则转换为对应的数字字符串。如果为一个颜色,则转换为rgba的字符串。除此之外,如果是Json格式,结果就是json字符串。
["to-string", value]: string
返回给定参数的类型
["typeof", value]: string