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,我的例子很好地解释了这个问题 但基本上,我试图理解在下面的代码中向函数添加静态成员时如何编写有效的typescript export const ZoomPanelControl = (props) => undefined; ZoomPanelControl.Item = (props) => undefined; 向函数添加属性最简单的方法是使用Object.assign()在单个语句中创建具有属性的函数: export const ZoomPanelControl = Obj

我的例子很好地解释了这个问题

但基本上,我试图理解在下面的代码中向函数添加静态成员时如何编写有效的typescript

export const ZoomPanelControl = (props) => undefined;
ZoomPanelControl.Item = (props) => undefined;

向函数添加属性最简单的方法是使用
Object.assign()
在单个语句中创建具有属性的函数:

export const ZoomPanelControl = Object.assign(
    (props) => undefined,
    { Item: (props) => undefined }
);
这将生成类型为
((props:any)=>any)和{Item:(props:any)=>any;}
的对象,这就是您想要的:

ZoomPanelControl(123); // okay
ZoomPanelControl.Item(456); // okay
祝你好运

如果在定义函数和分配属性之间需要“间隙”,可以使用类型断言:

type Example = {
    (props: any): any;
    [key: string]: (props: any) => any;
}

const ZoomPanelControl = <Example>((props) => undefined);

//...

ZoomPanelControl.Item = (props) => undefined;
如果您不想允许“任何字符串作为密钥”,您可以将其限制为已知成员

如果您是一次性设置的,(它有效地提供了我上一个代码块中的类型,但是免费的)

const ZoomPanelControl: Example = <any>((props) => undefined);
type Example = {
    (props: any): any;
    Item: (props: any) => any;
}