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

如何检查SASS中多变量的类型,sass,Sass,我已经创建了大量SASS变量,我需要在用户更改它们后检查它们的格式是否正确 例如,我有以下变量: $varible1: true; $variable2: false; $variable3: true; $variable4: "400, 500, 600"; $variable5: true; $variable6: "foo bar buzz"; $variable7: 4; $variable8: 9; etc... 正如你所看到的,并不是所有的变量都是布尔值,有些变量也是数字或字符串

我已经创建了大量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
语句来检查每个变量。是否有一种方法可以在一个
@if
语句中检查
$variable1
$variable2
$variable3
$variable5
,并将变量名称和值传递到错误消息中

到目前为止,我唯一的想法是创建另一个变量,该变量是我期望为布尔值的所有变量的列表,然后在其上执行
@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.";
    }
}

这是一个很好的方法,还是有其他建议?感谢那些感兴趣的人,我最终使用了变量名和类型的映射,然后循环,将名称和类型注入到错误消息中

不过,我在设置地图时遇到了几个问题。首先,
键不能是变量,因为它返回的是变量值而不是名称。我通过使用变量名减去
$
来解决这个问题。这使我能够看到在仍作为
键工作时查看的变量。其次,我需要有变量的值以及类型。我将每对的
值设置为另一个映射,变量为
,类型为
。这意味着我可以在这个数据上运行另一个循环来检查这些值。下面是我的地图的结构示例:

$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 $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()
检查变量的数据类型,如果与映射中写入的数据类型不匹配,则显示错误。我还在第一个循环之后设置了另一个变量,它只是第一个循环中的
,但是可以在第二个循环中访问,以帮助在错误消息中提供一些清晰性


我希望这足够清楚,让其他人能够理解,如果他们需要做类似的事情。

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

不过,我在设置地图时遇到了几个问题。首先,
键不能是变量,因为它返回的是变量值而不是名称。我通过使用变量名减去
$
来解决这个问题。这使我能够看到在仍作为
键工作时查看的变量。其次,我需要有变量的值以及类型。我将每对的
值设置为另一个映射,变量为
,类型为
。这意味着我可以在这个数据上运行另一个循环来检查这些值。下面是我的地图的结构示例:

$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 $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()
检查变量的数据类型,如果与映射中写入的数据类型不匹配,则显示错误。我还在第一个循环之后设置了另一个变量,它只是第一个循环中的
,但是可以在第二个循环中访问,以帮助在错误消息中提供一些清晰性

我希望这足够清楚,让其他人能够理解,如果他们需要做类似的事情的话