类型定义文件中的类型别名被“翻译”为 vscode 提示中的原始类型

问题描述 投票:0回答:1

我在

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 配置或我的别名类型有用性理解是否错误?

typescript visual-studio-code
1个回答
0
投票

您的

Money
number
类型完全等效。 类型别名不会创建新类型,它只是为现有类型提供另一个名称。这让 you 在任何你想要的地方使用
Money
。但 TypeScript 在显示类型时没有义务使用该别名本身。

并且没有记录在案的可靠方法可以让 IntelliSense 完全按照您希望的方式显示类型。有各种开放功能请求允许更多用户可配置的类型显示,例如 microsoft/TypeScript#28508microsoft/TypeScript#31940microsoft/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 代码链接

© www.soinside.com 2019 - 2024. All rights reserved.