微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

在 Typescript 中使用 switch 获取函数的安全值

如何解决在 Typescript 中使用 switch 获取函数的安全值

我有一个函数,它接受一个可以有 3 个不同值的参数。 这个函数根据参数返回一个值,所以它可以返回三个不同的值。

所以我使用了一个开关,它比较了参数来确定要返回的值。所以我对参数的每个可能值都有一个安全值。

但是如果我用参数调用函数,返回的值是不确定的,TypeScript 保留了其他 2 个值的可能性。

function get(value: "string" | "number" | "boolean") {
    switch (value) {
        case "string": 
            return "A";
        case "number": 
            return 1;
        case "boolean": 
            return true;
    }
}

var test1 = get("number");

enter image description here

那么如何拥有安全值呢?我必须通过枚举吗?提前致谢

解决方法

改用泛型,结合将 value 映射到返回值的对象:

const map = {
    string: 'A',number: 1,boolean: true,};
type MapType = typeof map;
function get<T extends keyof MapType>(value: T) {
    return map[value];
}

var test1 = get("number");

如果您希望返回类型精确 - 例如不仅是 number,而是 1 - 然后声明地图 as const 以避免自动加宽:

const map = {
    string: 'A',} as const;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。