我正在尝试为Quadstore库编写一个声明文件。该库定义了一个采用构造函数参数contextKey
的类。此参数的值确定方法参数上的字段名称。简化,等效的Typescript为:
interface MethodArg {
a: string;
b: string;
<<Whatever is supplied as the value of contextKey or a default name>>: string;
}
class A {
constructor(options?: {contextKey: string}) {}
fn(arg: MethodArg) {...}
}
如何声明MethodArg
的类型,以说第三个属性名称取决于赋予类构造函数的值(在声明文件中)?这有可能吗?
答案 0 :(得分:0)
我认为这是不可能的,因为我了解构造函数参数的 value 是在运行时定义的,但是MethodArg的类型是在编译时定义的(?),因此后者不能取决于前者,但是如果您希望将值提升为类型参数(从而提供运行时信息以编译时间),也许可以这样做
type MethodArg<E extends keyof any> = {
[T in E]: string;
} & { a: string; b: string };
class A<T extends string> {
constructor(options?: { contextKey: T }) {}
fn(arg: MethodArg<T>) {}
}
new A({ contextKey: "foo" }).fn({
a: "100",
b: "100",
foo: "foo",
});
// not the following way
let foo: string = "123";
new A({ contextKey: foo }).fn({
a: "100",
b: "200",
});