Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typescript/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typescript 如何使类符合接口_Typescript - Fatal编程技术网

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
中不是“静态的”de>IFoo,它是
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