Typescript 类型脚本类是函数,但也有属性
是否可以实现以下接口:Typescript 类型脚本类是函数,但也有属性,typescript,Typescript,是否可以实现以下接口: export interface Foo { (): void; bar: number; } 使用课堂 这是我能想到的最接近的事情: var foo = function () { } as Foo; foo.bar = 5; 虽然我不能完全确定,但我认为如果没有一些严重的黑客攻击,使用类是不可能的。我认为这种接口语法实际上是为了支持外部库类型,在很多情况下,这种结构是存在的 您在示例代码中实际引用的是类的静态成员。我的意思是,一个具有公共构造函
export interface Foo {
(): void;
bar: number;
}
使用课堂
这是我能想到的最接近的事情:
var foo = function () { } as Foo;
foo.bar = 5;
虽然我不能完全确定,但我认为如果没有一些严重的黑客攻击,使用类是不可能的。我认为这种接口语法实际上是为了支持外部库类型,在很多情况下,这种结构是存在的
您在示例代码中实际引用的是类的
静态成员。我的意思是,一个具有公共构造函数和一些静态成员的类正是这种构造。但是静态成员不能在接口中声明(显然)。所有类在编译成js时都是函数
export class FooClass implements Foo {
bar: number;
constructor() {
this.bar = 1;
}
}
不能让类执行此操作,但可以使用类型别名和交集类型执行以下操作:
// Define the type of your objects
type Foo = { (): void } & { bar: number };
// You could have a factory method to create instances
var fooFactoryMethod = (func: () => void, bar: number) => {
var foo = func as Foo;
foo.bar = bar;
return foo;
}
var myObject = fooFactoryMethod(() => { console.log("Hello world") }, 23)
// Or just creating them manually
var myObject2 = (() => { console.log("Hello world") }) as Foo;
myObject2.bar = 45;
// Now you can use it like this
var func = (arg: Foo) => {
arg();
arg.bar = 34;
}
func(myObject)
决定某件事是否可能的最好方法是去尝试。如果你仔细想想。。这就是类编译的目的;)也。在我的回答中,我假设您真正想要的是实现该接口的对象,而不一定是类。是这样吗?我正在寻找最干净的解决方案。不过模块的行为与类不同。@user3233089当然,但您需要在这里使用类吗?您的用例是什么?我需要使用特定于类的属性:例如创建的多个实例。@user3233089有帮助吗?