当我使用泛型约束接口时,为啥可以编译字符串[关闭]

Posted

技术标签:

【中文标题】当我使用泛型约束接口时,为啥可以编译字符串[关闭]【英文标题】:When I use generics to constrain an interface, why can strings be compiled [closed]当我使用泛型约束接口时,为什么可以编译字符串[关闭] 【发布时间】:2020-08-11 22:17:21 【问题描述】:

ts 解析器有隐式操作吗?为什么可以继承string的原型方法和属性?

【问题讨论】:

请将代码发布为文本,而不是图像。 一个字符串有一个长度属性和一个big method,为什么编译不出来? TypeScript 是结构类型的。也不清楚你认为这里继承了什么。 在编译字符串的过程中是否有隐式操作?对于接口,我理解只能作用于对象,是不是理解错了 【参考方案1】:

回答标题中的问题,JS中的“abc123”是一个String实例,具有lengthbig()属性,这符合接口,所以说“abc123”扩展Lengthwise是有效的.

ts 解析器有隐式操作吗?为什么可以继承string的原型方法和属性?

它们不是继承的,它们只是碰巧通过了您的界面。在函数内部,除了arg.lengtharg.big() 之外,您将无法使用任何东西。尝试在函数内部使用更多字符串函数将无法编译(如果您的设置足够严格),但在函数外部您可以随意使用。

【讨论】:

但是length和big是字符串原型上的方法。对于‘123’,它的类型是字符串,接口声明作用于对象。我知道我的理解有一些错误,但我还没有找到一个理论来证明 为什么原型上的属性和方法都验证过了?这一步发生在哪里?

以上是关于当我使用泛型约束接口时,为啥可以编译字符串[关闭]的主要内容,如果未能解决你的问题,请参考以下文章

请教一个unity有关于泛型参数的问题

Kotlin的泛型约束

Kotlin的泛型约束

为啥泛型 T 仅在具有约束时才被推断为文字类型?

c# where(泛型类型约束)

泛型约束