Consider this trivial example:
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
}
How can I use the interface Numbers to describe parameters of both methods? Perhaps there's other - more idiomatic - way of defining abstract methods?
CodePudding user response:
Please keep in mind that Numbers contains unordered set of keys, just like HashMap whereas both functionAdd and functionMultiply expects an ordered tuple of arguments. In other words, These methods expect:
functionAdd(...[number1, number2, number3]:[number, number, number])
It means that there is no safe way to transform Numbers into ordered tuple.
Actualy, there is a way to transform union to tuple but there is no order guarantee in unions.
SO, I believe you have two options.
- Either declare
Numbersas labeled tuple :
type Numbers = [number1: number, number2: number, number3: number]
// and use it
public abstract functionMultiply(...props:Numbers): number
- Or pass it to functions as is (as object with three props):
interface Numbers {
number1: number
number2: number
number3: number
}
public abstract functionMultiply({number1, number2, number3}: Numbers): number
