TypeScript学习之类型缩小
类型缩小
假设我们有一个名为 padLeft
的函数。
1 | function padLeft(padding: number | string, input: string): string { |
如果 padding
是 number
,它会将其视为我们想要添加到 input
的空格数。如果 padding
是 string
,它应该只是将 padding
前置到 input
。让我们尝试实现当 padLeft
为 padding
传递 number
时的逻辑。
1 | function padLeft(padding: number | string, input: string) { |
哦,我们在 padding
上遇到错误。TypeScript 警告我们,将 number | string
添加到 number
可能不会给我们想要的东西,这是正确的。换句话说,我们没有先明确检查 padding
是否是 number
,也没有处理它是 string
的情况,所以让我们这样做。
1 | function padLeft(padding: number | string, input: string) { |
如果这看起来像是无趣的 JavaScript 代码,那就是重点。除了我们放置的注释之外,这个 TypeScript 代码看起来像 JavaScript。这个想法是 TypeScript 的类型系统旨在使编写典型的 JavaScript 代码尽可能容易,而无需向后兼容以获得类型安全。