casting - 在 TypeScript 中构建具有属性的函数对象

标签 casting typescript function-object

我想创建一个函数对象,它也有一些属性。例如在 JavaScript 中我会这样做:

var f = function() { }
f.someValue = 3;

现在在 TypeScript 中,我可以将其类型描述为:

var f: { (): any; someValue: number; };

但是,我实际上无法构建它,而无需强制转换。如:

var f: { (): any; someValue: number; } =
    <{ (): any; someValue: number; }>(
        function() { }
    );
f.someValue = 3;

如果没有类型转换,您将如何构建它?

最佳答案

更新:这个答案是早期版本的 TypeScript 中的最佳解决方案,但在较新版本中有更好的选择(请参阅其他答案)。

已接受的答案有效并且在某些情况下可能是必需的,但缺点是没有为构建对象提供类型安全。如果您尝试添加未定义的属性,此技术至少会引发类型错误。

interface F { (): any; someValue: number; }

var f = <F>function () { }
f.someValue = 3

// type error
f.notDeclard = 3

关于casting - 在 TypeScript 中构建具有属性的函数对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12766528/

相关文章:

c# - 在 SQL Server 中将数字转换为 INT 的正确方法

reactjs - TypeScript:JSX 元素类型没有任何构造或调用签名

c++ - for_each 奇怪的行为

C# 将位图转换为 FFmediaToolkits ImageData

c# - 什么是 C# 中的接口(interface)转换?

javascript - 如何生成 Typescript 输出到正确的目的地?

javascript - 如何在 React 组件的 jsx 中使用三元运算符以及 typescript ?

c++ - 什么时候在 C++ 中使用函数对象?

c++ - 指向 std::vector 元素的指针

c++ - 这是删除基类指针的内存泄漏吗,如何改正