带有接口的抽象 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 一样,而 functionAdd
和 functionMultiply
都需要一个有序的参数元组。换句话说,这些方法期望:
functionAdd(...[number1, number2, number3]:[number, number, number])
这意味着没有安全的方法将Numbers
转换为有序元组。
实际上, to transform union to tuple but there is no order guarantee 在工会中。
所以,我相信你有两个选择。
- 要么将
Numbers
声明为带标签的元组:
type Numbers = [number1: number, number2: number, number3: number]
// and use it
public abstract functionMultiply(...props:Numbers): number
- 或者按原样传递给函数(作为具有三个属性的对象):
interface Numbers {
number1: number
number2: number
number3: number
}
public abstract functionMultiply({number1, number2, number3}: Numbers): number
考虑这个简单的例子:
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 一样,而 functionAdd
和 functionMultiply
都需要一个有序的参数元组。换句话说,这些方法期望:
functionAdd(...[number1, number2, number3]:[number, number, number])
这意味着没有安全的方法将Numbers
转换为有序元组。
实际上,
所以,我相信你有两个选择。
- 要么将
Numbers
声明为带标签的元组:
type Numbers = [number1: number, number2: number, number3: number]
// and use it
public abstract functionMultiply(...props:Numbers): number
- 或者按原样传递给函数(作为具有三个属性的对象):
interface Numbers {
number1: number
number2: number
number3: number
}
public abstract functionMultiply({number1, number2, number3}: Numbers): number