假设库X的打包文件包含一些接口.
interface I1 {
x: any;
}
interface I2 {
y: {
a: I1,
b: I1,
c: I1
}
z: any
}
Run Code Online (Sandbox Code Playgroud)
为了使用这个库,我需要传递一个与其完全相同的对象I2.y.我当然可以在源文件中创建相同的界面:
interface MyInterface {
a: I1,
b: I1,
c: I1
}
let myVar: MyInterface;
Run Code Online (Sandbox Code Playgroud)
但是后来我承担了使用库中的那个保持最新的负担,而且它可能非常大并导致大量代码重复.
因此,有没有办法"提取"接口的这个特定属性的类型?类似的东西let myVar: typeof I2.y(不起作用,导致"找不到名字I2"错误).提前致谢.
编辑:在TS Playground中玩了一下后,我注意到以下代码完全符合我的要求:
declare var x: I2;
let y: typeof x.y;
Run Code Online (Sandbox Code Playgroud)
但是,它需要x声明一个冗余变量.我正在寻找一种方法来实现这个没有这个声明.
有没有办法用另一个变量的类型声明一个变量?例如,我声明了一个具有某种类型的类成员,然后我想在同一类型的函数中声明另一个变量。但我不想修改原始声明,也不想复制它。似乎您应该能够执行以下操作:
class Foo {
bar: {[key: string]: string[]};
func() {
const x: TypeOf<Foo.bar> = {};
....
}
}
Run Code Online (Sandbox Code Playgroud)
我听说过专门针对函数返回类型的类似内容,但我再也找不到了...