当我使用泛型约束接口时,为啥可以编译字符串[关闭]
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实例,具有length
和big()
属性,这符合接口,所以说“abc123”扩展Lengthwise
是有效的.
ts 解析器有隐式操作吗?为什么可以继承string的原型方法和属性?
它们不是继承的,它们只是碰巧通过了您的界面。在函数内部,除了arg.length
和arg.big()
之外,您将无法使用任何东西。尝试在函数内部使用更多字符串函数将无法编译(如果您的设置足够严格),但在函数外部您可以随意使用。
【讨论】:
但是length和big是字符串原型上的方法。对于‘123’,它的类型是字符串,接口声明作用于对象。我知道我的理解有一些错误,但我还没有找到一个理论来证明 为什么原型上的属性和方法都验证过了?这一步发生在哪里?以上是关于当我使用泛型约束接口时,为啥可以编译字符串[关闭]的主要内容,如果未能解决你的问题,请参考以下文章