【发布时间】:2020-03-13 17:32:54
【问题描述】:
大多数(如果不是所有)静态类型语言都允许您为函数或构造函数参数指定单一类型;例如
function foo(x: string) { ... }
foo("hello") // works
foo(123) // error
TypeScript 是 JavaScript 的静态类型超集,但由于 JavaScript 是动态类型语言,TypeScript 允许您更灵活一点;例如,您可以指定多个 allowable 类型。
function foo(x: string | number) { ... }
foo("hello") // works
foo(123) // works
foo(true) // error
此外,在 TypeScript 中,这允许您将泛型类型参数仅限制为特定类型;例如:
class Foo<T extends number | string> {
constructor(x: T) { ... }
}
new Foo("hello") // works
new Foo(123) // works
new Foo(true) // fails
问题
我喜欢 TypeScript 将泛型类型参数仅限制为特定类型的能力,但我也希望能够在其他语言中做到这一点,即 C# 和 Kotlin,但据我所知,没有等效的构造在这些语言中支持这样的约束。用其他语言如何实现这一点?
注意:我很乐意接受任何语言的答案,而不仅仅是列出的那些。这更多的是关于更高层次的思考和探索可以跨语言应用的其他途径。
【问题讨论】:
-
对于C#,第一种情况可以使用方法重载
标签: javascript c# typescript kotlin language-agnostic