如何扩展字符串文字类型?

2024-05-18

Given

export type Foo = 'foo' | 'bar;

如何扩展类型Foo(在另一个模块中)也允许'x' | 'y'尽可能的价值?

如果我在其他地方写:

export type Foo = 'x' | 'y'

Typescript 抱怨重复的标识符Foo.


您无法覆盖现有的Foo类型。这样做的原因是现有代码可以依赖于Foo being only 'foo' or 'bar'。在下面的示例中,类型检查器不仅推断出a不可能是'foo' in the else块,可以推断a绝对是'bar' there:

type Foo = 'foo' | 'bar';
function test(x: Foo) {
    if (x === 'foo') {
        // infers x === 'foo'
    } else {
        // infers x === 'bar'
    }
}

但是,您可以创建一个新的类型别名,它接受所有的值Foo类型,加上其他一些:

type Foo = 'foo' | 'bar';
type FooEx = Foo | 'x' | 'y';

var a : FooEx;
a = 'foo'; // ok
a = 'x';   // ok
a = 'z';   // error
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何扩展字符串文字类型? 的相关文章

随机推荐