我在
types.d.ts
文件夹中创建了一个名为 src
的文件,该文件包含在 "include"
中的 tsconfig.json
键中。
如果我在
types.d.ts
文件中创建类型别名,如下所示:
type money = number;
在项目中的
.ts
文件中,我按如下方式使用它:
let total: money = 100.00;
当我将鼠标悬停在“金钱”上时,VS Code 将其描述为
let total: number
这是正确的吗?我不应该将其视为“总计:金钱”吗?我的 TypeScript 配置或我的别名类型有用性理解是否错误?
您的
Money
和 number
类型完全等效。 类型别名不会创建新类型,它只是为现有类型提供另一个名称。这让 you 在任何你想要的地方使用 Money
。但 TypeScript 在显示类型时没有义务使用该别名本身。
并且没有记录在案的可靠方法可以让 IntelliSense 完全按照您希望的方式显示类型。有各种开放功能请求允许更多用户可配置的类型显示,例如 microsoft/TypeScript#28508、microsoft/TypeScript#31940 和 microsoft/TypeScript#45954,但我没有看到任何迹象正在研究这个问题。
有多种技巧可以尝试影响这种行为。一种可能性是
type Money = number & {}
通过
Money
与空类型 number
相交,将 {}
转变为伪 品牌原始类型。这不会改变可分配给它的值(
{}
匹配除null
或undefined
之外的所有内容,因此number & {}
相当于number
),但它确实改变了表示(number & {}
可以 被积极地减少为 number
,但这是为了支持品牌原语而专门避免的)。这足以让编译器以不同的方式显示它:
let total: Money = 100.00;
// ^? let total: Money
这有效。目前。 TypeScript 使用您的别名仍然不是“必需”。据我所知,在 TypeScript 的下一个版本中,上述类型将显示为 number & {}
,甚至可能显示为
number
。这类事情始终是一门艺术而不是一门科学,至少直到并且除非上面列出的一个或多个 GitHub 问题得到实现。Playground 代码链接