我有一个像这样的TypeScript界面:
export interface Foo {
bar: string
}
这将编译为空的.js
文件。
因此,在ES6节点模块中使用TypeScript接口时,会出现此错误:
TypeError: Class extends value undefined is not a function or null
一种解决方法是创建一个类
export class BaseFoo {
bar: string
}
现在,我可以在ES6中使用BaseFoo
而不会出现上述错误。
因此,不可能只在TypeScript中使用带有ES6 interop的接口,还是有比这里的Base*
类(最终不是真正的基类)更优雅的方式?
更新:我了解接口和基类背后的不同概念,但我的问题是有关如何在TypeScript中创建使用接口的库以及如何以普通ES6(不具有接口)的方式构建库的最佳实践。也可以使用此库。
答案 0 :(得分:2)
我认为您误会了如何正确使用界面。接口不是“基础”对象,它们可以简单地定义对象的外观。
在打字稿中,通常将接口用作对象的类型,但通常也可以用来定义类的“外观”。
例如:
interface Foo {
bar: string;
baz: number;
bang(): void;
}
在这种情况下,implements
Foo
的任何对象/类都需要具有这三个条件。
IE:
class FooImplemented implements Foo {
bar = 'Hello World';
baz = 42;
bang() {
print(this.bar);
}
}
如果我未定义bar,baz和/或bang;如果我在Foo
类中未正确实现FooImplemented
接口,则打字稿将在编译时引发错误。
总而言之,接口告诉编译器应该是什么样子。一个接口可以扩展另一个接口。但是,类不能扩展接口,但是可以实现一个接口。 (或多个)