条件联合类型开关键入中的Typescript类型安全性

漂亮

我有一个简单的函数,将联合类型和aboolean作为参数,并且无法通过Typescript进行键入。

我有此代码(这里是操场):

type A = 'a' | 'A';

function f(a: A, b: boolean): string {
    if (b) {
        switch (a) {
            case 'a': return '';
            case 'A': return '';
        }
    } else {
        switch (a) {
            case 'a': return '';
            case 'A': return '';
        }
    }
}

编译器(strictNullChecks启用时)告诉我Function lacks ending return statement and return type does not include 'undefined'.

我真的不想添加default案例,因为这里的目的是确保在添加新类型时,A我可以正确处理它们f而且我看不到我缺少哪个分支。

我可以通过写来解决(请参见链接的游乐场):

function g(a: A): string {
    switch (a) {
        case 'a': return '';
        case 'A': return '';
    }
}

function f2(a: A, b: boolean): string {
    if (b) {
        return g(a);
    } else {
        return g(a);
    }
}

(当然,在现实生活中,我需要两个不同的g函数,但是对于键入问题而言,这并不重要)。

如何在f不引入类似中间函数的情况下让打字稿进行编译g

穆拉特·卡拉戈斯(Murat Karagoz)

您可以添加default案例来修复它,例如

function f(a: A, b: boolean): string {
    if (b) {
        switch (a) {
            case 'a': return '';
            case 'A':
            default: return '';
        }
    } else {
        switch (a) {
            case 'a': return '';
            case 'A':
            default: return '';
        }
    }
}

您还可以never通过返回使用类型来修复它,例如

function f(a: A, b: boolean): string {
    if (b) {
        switch (a) {
            case 'a': return '';
            case 'A': return '';
            default:
                const _exhaustiveCheck: never = a;
                return _exhaustiveCheck;
        }
    } else {
        switch (a) {
            case 'a': return '';
            case 'A': return '';
            default:
                const _exhaustiveCheck: never = a;
                return _exhaustiveCheck;
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

禁止使用显式类型参数或约束联合类型参数以提高类型安全性

使用泛型+联合类型从类中实现抽象方法时,类型安全性问题[Typescript]

为什么在数组中建立索引会破坏TypeScript中的类型安全性?

在Typescript中如何与类型安全性绑定时赋函数?

在TypeScript中以编程方式将方法添加到具有类型安全性的类?

如何在TypeScript中为返回的函数获得类型安全性?

如果Typescript中满足条件,如何断言联合类型的类型?

在TypeScript中使用联合类型键入数组?

TypeScript:联合类型分布的条件类型数组

TypeScript编译失败,因为类型声明“ any”失去了类型安全性

input.nextLine的类型安全性?

使用固定整数类型的安全性

我可以在TypeScript中制作对每个键值对都具有类型安全性的键值字典吗?

我需要实现哪个 Typescript 功能才能在此工厂模式中具有适当的类型安全性?

TypeScript中的联合类型分配

重载TypeScript中的联合类型

如何在不省略类型注释的情况下为 TypeScript 中具有许多属性的对象提供类型安全性?

如何为我的redux操作添加TypeScript类型安全性?

通用图式数据结构类的typescript类型安全性

TypeScript中的条件类型

如何在JSON配置文件中添加安全性/自动完成类型?

带联合的条件类型

分配给Typescript中的联合类型

TypeScript和React中的联合类型道具

如何从联合类型在 TypeScript 中创建 Promise

从 TypeScript 中的 keyof 类派生的联合类型

使用类型安全性定义打字稿泛型

春季安全性:用户->用户类型->权限

使用* args时,函数参数的类型安全性(mypy)