是否有方法更改在〈代码〉*中定义的接口属性的类型。d、 在typescript中?
例如:x.d.ts
中的接口定义为
interface A {
property: number;
}
我想在我写入的typescript文件中更改它
interface A {
property: Object;
}
甚至这样也行
interface B extends A {
property: Object;
}
这种方法有效吗?当我尝试我的系统时,它没有工作。只是想确认一下这是否可能?
无法更改现有属性的类型。
您可以添加属性:
interface A {
newProperty: any;
}
但改变现有的一种类型:
interface A {
property: any;
}
导致错误:
后续变量声明必须具有相同的类型。变量“property”的类型必须为“number”,但此处的类型为“any”
您当然可以拥有自己的接口来扩展现有接口。在这种情况下,您可以仅将类型覆盖为兼容类型,例如:
interface A {
x: string | number;
}
interface B extends A {
x: number;
}
顺便说一句,您可能应该避免使用对象作为类型,而应该使用类型any。
在任何
类型的文档中,它声明:
any类型是使用现有JavaScript的一种强大方式,允许您在编译期间逐渐选择加入和退出类型检查。您可能希望Object扮演类似的角色,就像在其他语言中一样。但是Object类型的变量只允许您为其分配任何值-您不能对其调用任意方法,即使是实际存在的方法:
let notSure: any = 4;
notSure.ifItExists(); // okay, ifItExists might exist at runtime
notSure.toFixed(); // okay, toFixed exists (but the compiler doesn't check)
let prettySure: Object = 4;
prettySure.toFixed(); // Error: Property 'toFixed' doesn't exist on type 'Object'.
type ModifiedType = Modify<OriginalType, {
a: number;
b: number;
}>
interface ModifiedInterface extends Modify<OriginalType, {
a: number;
b: number;
}> {}
受ZSkycat的扩展省略
解决方案的启发,我想出了这个:
type Modify<T, R> = Omit<T, keyof R> & R;
// before typescript@3.5
type Modify<T, R> = Pick<T, Exclude<keyof T, keyof R>> & R
例子:
interface OriginalInterface {
a: string;
b: boolean;
c: number;
}
type ModifiedType = Modify<OriginalInterface , {
a: number;
b: number;
}>
// ModifiedType = { a: number; b: number; c: number; }
循序渐进:
type R0 = Omit<OriginalType, 'a' | 'b'> // { c: number; }
type R1 = R0 & {a: number, b: number } // { a: number; b: number; c: number; }
type T0 = Exclude<'a' | 'b' | 'c' , 'a' | 'b'> // 'c'
type T1 = Pick<OriginalType, T0> // { c: number; }
type T2 = T1 & {a: number, b: number } // { a: number; b: number; c: number; }
TypeScript实用程序类型
interface Original {
a: {
b: string
d: {
e: string // <- will be changed
}
}
f: number
}
interface Overrides {
a: {
d: {
e: number
f: number // <- new key
}
}
b: { // <- new key
c: number
}
}
type ModifiedType = ModifyDeep<Original, Overrides>
interface ModifiedInterface extends ModifyDeep<Original, Overrides> {}
// ModifiedType =
{
a: {
b: string
d: {
e: number
f: number
}
}
b: {
c: number
}
f: number
}
在下面查找ModifyDeep。
我使用一种方法,首先过滤字段,然后组合它们。
引用从类型中排除属性
interface A {
x: string
}
export type B = Omit<A, 'x'> & { x: number };
对于界面:
interface A {
x: string
}
interface B extends Omit<A, 'x'> {
x: number
}
在spring boot中,我有以下配置文件:application-email.yaml
这些是我没用的财产领域... 是hibernate覆盖了这个超时值,还是我设置得不正确?提前感谢!
问题内容: 我想要的只是让bool(myInstance)返回False(以及在if / or / and等条件下让myInstance评估为False。我知道如何覆盖>,<,=) 我已经试过了: 有什么建议? (我正在使用Python 2.6) 问题答案: 这是Python 2.x还是Python 3.x?对于Python 2.x,您正在寻找替代方法。
在这个特定的示例中,我扩展了
问题内容: 我想组成另一种类型的类型,但用假冒替换字段之一(这是接口值)。我遇到的问题是正在使用基础字段,因此我似乎无法覆盖该字段。 我在这里演示了这个问题:https : //play.golang.org/p/lHGnyjzIS-Y 为什么打印?我要打印。 谢谢。 问题答案: 通过,您正在调用 提升的 方法,方法接收者将是哪种类型,并调用何处是哪种类型,这就是它打印的原因。 在Go中有嵌入,但
问题内容: 在Swift中,有人可以解释如何用原始属性的子类覆盖另一个超类的属性吗? 举一个简单的例子: 这给出了错误: 如果我将机箱设为“ var”,则会收到错误消息: 在指南中“覆盖属性”下唯一可以找到的内容表明,我们必须覆盖getter和setter,这可能会更改属性的值(如果它是’var’),但是如何更改属性类呢? ? 问题答案: Swift不允许您更改任何变量或属性的类类型。相反,您可以