Typescript类型别名让Intellisense显示别名而不是源类型

时间:2019-09-23 10:36:01

标签: typescript types type-alias

考虑这段简短的代码

List {
    ForEach(searchService.searchResult, id: \.self) { item in
        Text(item)
        .font(.custom("Avenir Next Regular", size: 12))
    }
}.frame(height: CGFloat(searchService.searchResult.count * 20))

TS为什么显示type A = number; declare function f(): A; const a = f(); // `a` is number, not A 而不是a: number

1 个答案:

答案 0 :(得分:1)

类型别名,顾名思义就是其他类型的别名。类型别名不是编译器保证保留的东西(与接口不同),它使用启发式方法来提供最佳的用户体验(在这种情况下,它可能会失败)。

Anumber实际上不是同一类型。如果要确保numberA的取消同化,则需要使用branded types

type A = number & { isA: undefined};

declare function f(): A;

const a = f(); // `a` is A, not number

play

注意:还有一个建议(thisthis)将品牌类型机制烘焙到打字稿中,但在撰写本文时尚未定稿。