问题标签 [structural-typing]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
typescript - Typescript:如何使用结构子类型和继承
考虑以下 Typescript 类:
由于 Typescript 的结构子类型系统,这意味着即使我们将 String255 类分配给 String255Required 属性,下面的构造函数中的“firstName”也不会报告为错误。
所以问题是,处理结构子类型的最佳实践是什么。我可以在“修复”问题的类中引入无用的属性,例如
编译器现在报告我所期望的错误,因为 String255Required 具有与 String255 不同的属性,但这显然是不可取的。人们在做什么来避免这些问题?请注意,我正在尝试使用类来执行基于类型的业务规则。
scala - 如何检查任何值是否为空?
我具有以下特征和类(实际上这是一种简化,真正的代码是用 Java 编写的,不在我的控制范围内):
现在我正在尝试改进我的 API 而不触及原始代码(Pimp My Library 模式):
它工作得很好:
仍然是模式匹配isEmpty
很麻烦。理想情况下,我想使用结构类型并确保实现的任何类型都isEmpty
适用于我的 API。
不幸的是,下面的代码不起作用。该变量e
匹配任何类型,即使value
没有定义isEmpty
:
有没有办法isEmpty
仅在底层value
实现时委托?
angular - 结构类型和多态 - 添加超类型
下面是使用 TypeScript 语法取自Angular框架的示例代码(多态),
AbstractControlDirective
亚型
NgControl
亚型
一般来说,有很多情况会遇到新的需求,在类层次结构的中间层中添加明显的超类型,这会在子类型中注入破坏,除非使用某种设计模式。使用设计模式可以使类层次结构不易出错,但会破坏层次结构。
为了避免这个问题,我们可以在不使用extends
关键字的情况下保持这种层次结构吗?TypeScript 是结构类型的...
javascript - 结构类型不是鸭子类型
如 TypeScript手册中所述:
TypeScript 的核心原则之一是类型检查关注值的形状。这有时被称为“鸭子类型”或“结构子类型”。在 TypeScript 中,接口扮演命名这些类型的角色,...
我的理解是,上面的核心原理与Duck 类型无关,而是Structural typing,因为 TypeScript 是静态类型语言。
正如wiki中提到的:它要求将类型检查推迟到运行时,并通过动态类型或反射来实现......对象的适用性取决于某些方法和属性(具有适当含义)的存在,而不是对象的实际类型。
如何理解上述 TypeScript 的核心原理?
scala - 如何在 Scala 中编写一个获取任意类的方法
编写对定义了加法操作的任何类进行操作的方法的正确方法是什么?
我想这就像
但它不工作。
arrays - 使用结构类型时出现意外错误
我是 Scala 编程的新手,所以如果这是一个愚蠢的问题,请多多包涵。我期待下面的代码能够工作,因为a
有一个mkString
方法。
但它给出了以下错误:
错误:(3, 16) AnyRef{def mkString(): String} 不采用类型参数 case class A[T: {def mkString(): String}](i: T)
错误:(4, 14) 值 mkString 不是类型参数 T val s = i.mkString 的成员
我正在使用 Scala 2.11.6。
任何帮助将不胜感激!谢谢 !
typescript - 为什么 TypeScript 有一个结构化的类型系统?
我认为创建面向对象的编程是因为它与人类的思维方式有关,但结构类型似乎不符合这个假设。
例如考虑两个具有相同结构的类:
我可以使用 Robot 类的引用来指向 Human 实例,反之亦然,但当然,如果你问人类,Robot 和 Human 不是一回事。
当我更改其中一个类的结构时,我还必须更改指向 Human 实例的 Robot 引用。
scala - Structural types with generics in Scala
I tried to define a structural type which is matched to an instance with a generic type. Like in this example code:
but I get a compilation error:
Parameter type in structural refinement may not refer to an abstract type defined outside that refinement
def add[T](container: {def add(s: T): Boolean})(element: T): Unit = {
When I get rid of the generic type in the method and write the code like this:
it compiles but I get a runtime exception:
java.lang.NoSuchMethodException: java.util.HashSet.add(java.lang.String)
My question is: How to correctly define the structural type, so it can work with Java collections?
Note that it cannot replace them with Scala collection (it will be used with a Java library).
typescript - 在 TypeScript 中调用函数类型的联合
在 TypeScript 3.0.3 中,以下代码将给出编译时错误:
我希望 f 的类型是function f(): {left:String; right:String} => String
或等价的(例如,Scala 类型检查器报告了这样的类型)。
但是,我收到以下类型错误:
尽管我们可以引用对象类型联合中的字段,但函数类型的联合似乎不能直接调用。
有什么方法可以修改f()
为可调用的,同时在其中保留if
-statement 吗?