带有接口的抽象 class 的类型化方法

Typing method of a abstract class with an interface

考虑这个简单的例子:

abstract class Foo {

  public abstract functionAdd(number1, number2, number3): number

  public abstract functionMultiply(number1, number2, number3): number
}

interface Numbers {
  number1: number
  number2: number
  number3: number
}

如何使用接口 Numbers 来描述这两种方法的参数?也许还有其他更惯用的方式来定义抽象方法?

请记住,Numbers 包含无序的键集,就像 HashMap 一样,而 functionAddfunctionMultiply 都需要一个有序的参数元组。换句话说,这些方法期望:

functionAdd(...[number1, number2, number3]:[number, number, number])

这意味着没有安全的方法将Numbers转换为有序元组。

实际上, to transform union to tuple but there is no order guarantee 在工会中。

所以,我相信你有两个选择。

  1. 要么将 Numbers 声明为带标签的元组:
type Numbers = [number1: number, number2: number, number3: number]

// and use it
  public abstract functionMultiply(...props:Numbers): number
  1. 或者按原样传递给函数(作为具有三个属性的对象):

interface Numbers {
  number1: number
  number2: number
  number3: number
}

 public abstract functionMultiply({number1, number2, number3}: Numbers): number