如何在SASS中检查多个变量的类型

时间:2017-06-03 10:02:57

标签: sass

我创建了大量的SASS变量,我需要在用户更改后检查它们是否格式正确。

例如,我有以下变量:

$varible1: true;
$variable2: false;
$variable3: true;
$variable4: "400, 500, 600";
$variable5: true;
$variable6: "foo bar buzz";
$variable7: 4;
$variable8: 9;
etc...

如您所见,并非所有变量都是布尔值,有些也是数字或字符串。但是,每个变量总是应该是某种类型($variable5应该总是一个布尔值等)。我想要做的是检查每个变量类型,如果不正确则给出错误消息。我编写了以下@if语句来检查第一个变量:

@if type-of($variable1) != bool {
    @error "'#{$variable1}' is not a valid value for $variable1, you must use a boolean.";
}

问题是,我最终会得到一个包含30多个@if语句的列表来检查每个变量。有没有办法可以在一个$variable1语句中检查$variable2$variable3$variable5@if,并将变量名称和值传递给错误消息?

到目前为止,我唯一的想法是创建另一个变量,它是我希望成为布尔值的所有变量的列表,然后对它进行@each循环,如:

$boolean-variables: $variable1, $variable2, $variable3...
@each $var in $boolean-variables {
    @if type-of($var) != bool {
        @error "'#{$var}' is not a valid value for $var, you must use a boolean.";
    }
}

这是一个很好的方法吗,还是有其他建议?感谢

1 个答案:

答案 0 :(得分:0)

对于那些感兴趣的人,我最终使用了变量名称和类型的映射,然后循环,然后将名称和类型注入到错误消息中。

然而,我确实遇到了一些设置地图的问题。首先,key不能是变量,因为它返回变量值而不是名称。我通过使用变量的名称减去$来解决这个问题。这让我可以看到我正在查看哪个变量,同时仍然是key。其次,我需要获得变量的值以及类型。我将每对value设置为另一个地图,变量为key,类型为value。这意味着我可以在此数据上运行另一个循环来检查这些值。下面是我的地图结构的示例:

$setting-types: (
    variable-name1: ($variable-name1: bool),
    variable-name2: ($variable-name2: bool),
    variable-name3: ($variable-name3: list)
}

这有效地回归:

$setting-types: (
    variable-name1: (true: bool),
    variable-name2: (false: bool),
    variable-name3: (foo, bar, buzz: list)
}

然后我就可以在地图上运行@each函数,如下所示:

@each $setting, $data in $setting-types {
    $setting-name: $setting;
    @each $variable, $type in $data {
        @if type-of($variable) != $type {
            @error "'#{$variable}' is not a valid value for $#{$setting-name}, you must use a #{$type}.";
        }
    }
}

第一个循环拆分映射中的每个变量,然后第二个循环遍历变量值和预期数据类型。然后我使用type-of()来检查变量的数据类型是什么,如果与地图中写入的内容不匹配,则显示错误。我还在第一个循环之后设置了另一个变量,它只是来自第一个循环的key,但是可以在第二个循环中访问,以帮助在错误消息中提供一些清晰度。

如果他们需要做类似的事情,我希望这足以让别人理解。