假设有一个类库X的输入文件,其中包含一些接口。
interface I1 {
x: any;
}
interface I2 {
y: {
a: I1,
b: I1,
c: I1
}
z: any
}
为了使用这个库,我需要传递一个与I2类型完全相同的对象。y
。当然,我可以在源文件中创建相同的接口:
interface MyInterface {
a: I1,
b: I1,
c: I1
}
let myVar: MyInterface;
但这样一来,我就有了让它和库中的一个保持最新的负担,而且它可能非常大,并导致大量代码重复。
因此,有没有办法“提取”接口的这个特定属性的类型?类似于让myVar:typeof I2。y
(这不起作用,导致“找不到名称I2”错误)。
编辑:在TS操场上玩了一会儿后,我注意到以下代码完全实现了我想要的:
declare var x: I2;
let y: typeof x.y;
但是,它需要声明一个冗余变量x
。我正在寻找一种在没有这一宣言的情况下实现这一目标的方法。
接口类似于对象的定义。那么y是I2对象的一个属性,它是某种类型的,在这种情况下是“匿名的”。
您可以使用另一个接口来定义y,然后像这样将其用作y类型
interface ytype {
a: I1;
b: I1;
c: I1;
}
interface I2 {
y: ytype;
z: any;
}
您可以将接口放在一个文件中并使用extract,以便将其导入到项目的其他文件中
export interface ytype {
a: I1;
b: I1;
c: I1;
}
export interface I2 {
y: ytype;
z: any;
}
您可以这样导入它:
import {I1, I2, ytype} from 'your_file'
要扩展已接受的答案,您还可以使用type
关键字分配类型,并在其他地方使用它。
// Some obscure library
interface A {
prop: {
name: string;
age: number;
}
}
// Your helper type
type A_Prop = A['prop']
// Usage
const myThing: A_prop = { name: 'June', age: 29 };
这在以前是不可能的,但幸运的是,自从TypeScript版本2.1以来,现在已经实现了。它已于2016年12月7日发布,并引入了索引访问类型(也称为查找类型)。
语法看起来与元素访问完全相同,但是在类型的位置编写的。因此,在你的情况下:
interface I1 {
x: any;
}
interface I2 {
y: {
a: I1,
b: I1,
c: I1
}
z: any
}
let myVar: I2['y']; // indexed access type
现在myVar
具有I2. y
的类型。
在TypeScript游乐场中查看它。
问题内容: 假设我有以下情况: 有没有一种方法可以保证实现的任何类也必须扩展?我不想创建一个抽象类,因为我希望能够以类似的方式混合其他一些接口。 例如: 问题答案: Java接口无法扩展类,这很有意义,因为类包含无法在接口内指定的实现细节。 解决此问题的正确方法是通过将接口也完全从实现中分离出来。所述等可以扩展接口以迫使程序员来实现相应的方法。如果要在所有实例之间共享代码,则可以将(可能是抽象的)
我知道在摇摆中,您可以使用父窗口打开子窗口/对话框/框架,并且子窗口将具有与父窗口相同的属性,例如共享左上角的徽章。JavaFX 8中是否有任何类似的功能?这会创建一个新窗口,但没有任何共享信息的父窗口(甚至可以关闭父窗口,而子窗口不会关闭): 注意:我已经阅读了JavaFX2.0FXML子窗口和JavaFXOpenNewWindow。
有没有办法只在满足条件时才在Javafx中“渲染”组件?我有兴趣做一个具有不同角色的用户界面,如果角色允许,只需添加一个组件,我也想继续使用FXML。我没有读过类似的东西。
问题描述 我想在Type cript中的接口中定义两个可选属性。这两个属性中的一个并且只有一个必须存在于此接口的实例对象中。 我试过什么 当前解决方案的问题 虽然当前解决方案确保必须存在两个属性之一,即和,但它不会使它们相互排斥。也就是说,和都可能存在于实例对象中,它仍然会通过当前接口检查。 问题示例 以下是 接口实例的示例,其中对象同时包含和,并且 linter 仍然不显示任何错误:
问题内容: 目前我有这样的事情 main.go 还有我的工作包 和 我正在传递给NewJob的函数是在goroutine上每2秒执行一次,但是我想访问我传递的匿名结构…但是当我尝试访问时 编号 我越来越 t.Id未定义(类型interface {}是没有方法的接口) 但是打印t给我预期的结果 {1} 问题答案: 您必须先将其声明为兼容类型,然后才能访问其字段。
问题内容: 首先,我阅读了埃里克森对“为什么不能在Java接口中定义静态方法?”的有用答复。。这个问题不是关于“为什么”的问题,而是关于“然后如何做”的问题。 编辑:我的原始示例不适当地,但我将其保留在下面。 虽然我现在确信在大多数情况下我想做的是过度矫kill过正,但在一种情况下可能需要这样做: 我再举一个例子。现在,让我们采用一个适合于查找表的复杂功能,例如Bessel函数。这必须进行初始化,