我正在开发一个库,我希望借助 Typescript 直接在他们的 IDE 中为我的用户提供上下文帮助。
然而,当我命名我的类型而不是每次都完整地描述它们时,我似乎得到的有用信息较少。
这里是一个实施了两次的人为示例,一次是命名类型,另一次是到处都有完整的类型描述,以说明我的问题:
export type ComplexNumber = {
r: number,
i: number
}
export default function addComplexNumbers (
a: ComplexNumber,
b: ComplexNumber
): ComplexNumber {
return { r: a.r + b.r, i: a.i + b.i }
}
有了这个版本,如果我开始写
addComplexNumbers(
,我的IDE(VS Code)会给我函数参数和返回值的类型信息,如下所示:
addComplexNumbers(a: ComplexNumber, b: ComplexNumber): ComplexNumber
这是正确的,但无法帮助我为
a
和 b
提供正确的参数。相反,我只能猜测如何制作与 ComplexNumber
兼容的东西。我可以尝试 new ComplexNumber
或带有像 real
和 imaginary
这样的键的对象,但在这两种情况下我都是错的。
与以下版本比较:
到处都是完整的类型描述
export default function addComplexNumbers (
a: { r: number, i: number },
b: { r: number, i: number }
): { r: number, i: number } {
return { r: a.r + b.r, i: a.i + b.i }
}
在这种情况下,一旦我开始输入,我就会得到更多帮助
addComplexNumbers(
:
addComplexNumbers(a: { r: number; i: number; }, b: { r: number; i: number; }): { r: number; i: number; }
如您所见,第二个版本提供的信息比第一个版本多得多。
但是,第二种方法也涉及到更多重复的代码,因此不太容易维护。
我的问题:
有没有一种方法可以两全其美,避免重复代码,为我的类型保留单一的真实来源,并为用户提供更多有用的信息?