【问题标题】:Proper typescript type aliasing正确的打字稿类型别名
【发布时间】:2020-10-01 07:02:34
【问题描述】:

我想在打字稿中应用正确的别名类型。

[示例]


type O = {
    a?: "aa",
    b?: "bb",
    c?: "cc"
}
type Str = 'a' | 'b' | 'c';
type ReturnOfFoo = 'aa' | 'bb' | 'cc';

const o: O = {};

const foo = (str: Str): ReturnOfFoo => {
    if(str === 'a') return 'aa';
    if(str === 'b') return 'bb';
    return 'cc';
}

const createRandomStr = (): Str => ['a', 'b', 'c'][Math.floor(Math.random() * 3)] as Str;

const key: Str = createRandomStr();
const value: ReturnOfFoo = foo(key);

o[key] = value // o[key] error occured!

所以,我确实在下面使用了“If 语句”。

if(key === 'a') {
  o[key] = value as 'aa';
}

if(key === 'b') {
  o[key] = value as 'bb';
}

if(key === 'c') {
  o[key] = value as 'cc';
}

但是,它并不酷。

我确实为类型写了更多代码。

有没有更好的办法?

我可以使用“任何”类型,但这也不是一个好主意。

【问题讨论】:

    标签: typescript


    【解决方案1】:

    编辑抱歉,乍一看造成误解。

    在最后一行添加演员表将解决您的问题:

    (o[key] as ReturnOfFoo) = value
    

    Playground Link

    【讨论】:

    • OP 正在尝试将 value 分配给 o[key] 而没有大量分支。您的链接中没有任何内容,如果我添加它,这是一个错误:typescriptlang.org/play?#code/…
    猜你喜欢
    • 2017-03-09
    • 1970-01-01
    • 2017-06-12
    • 2020-10-20
    • 2023-01-11
    • 2020-05-31
    • 2021-05-06
    • 2019-08-10
    • 2022-09-24
    相关资源
    最近更新 更多