Typescript 如何使类符合接口
当我说Typescript 如何使类符合接口,typescript,Typescript,当我说类Foo实现IFoo时,它强制类的实例遵循契约 e、 g 但是,如果我希望类(而不是实例)符合接口,该怎么办 只需使用作业进行检查: interface IFoo { foo: number } class Foo { static foo: number } const ensureCompatible:IFoo = Foo; // Check 因为一个朋友在推特上问我:,所以发到这里\_(ツ)_/“这不是很令人震惊吗?ensureCompatible:IFoo意味着ensureCo
类Foo实现IFoo
时,它强制类的实例遵循契约
e、 g
但是,如果我希望类(而不是实例)符合接口,该怎么办 只需使用作业进行检查:
interface IFoo { foo: number }
class Foo {
static foo: number
}
const ensureCompatible:IFoo = Foo; // Check
因为一个朋友在推特上问我:
,所以发到这里\_(ツ)_/“
这不是很令人震惊吗?ensureCompatible:IFoo
意味着ensureCompatible
有一个属性foo
。相等意味着类/函数foo
有一个属性foo
。这是正确的,因为foo
在foo
中声明为静态。然而foo
在IFoo
实例的一个属性。换句话说,您不能使用接口来描述Foo
的非静态属性,因此一致性将非常重要limited@BrunoGrieder-不能使用同一个接口来完全描述两种完全不同的类型。只能描述它们在c语言中的内容ommon.如果它们没有共同点,那么重叠部分就是{}
,空接口。在JS中,类只是一个函数(调用时需要new
前缀)。函数可以有属性。因此,“带静态的类”实际上声明了一个带属性的new
-函数。它返回“类的实例”通常与创建它们的函数具有完全不同的类型。因此类Foo
声明了两种类型:[1]Foo
,这是类实例支持的接口,[2]typeof Foo
,这是创建实例的函数Foo
支持的接口。
interface IFoo { foo: number }
class Foo {
static foo: number
}
const ensureCompatible:IFoo = Foo; // Check