Question: I want to create a function object, which also has some properties held on it. For example in JavaScript I would do:

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

```

Now in TypeScript I can describe the type of this as:

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

```

However I can't actually build it, without requiring a cast. Such as:

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

```

How would you build this without a cast?

Answer: 
So if the requirement is to simply build and assign that function to "f" without a cast, here is a possible solution:

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

f = (() => {
    var _f : any = function () { };
    _f.someValue = 3;
    return _f;
})();

```

Essentially, it uses a self executing function literal to "construct" an object that will match that signature before the assignment is done. The only weirdness is that the inner declaration of the function needs to be of type 'any', otherwise the compiler cries that you're assigning to a property which does not exist on the object yet.

EDIT: Simplified the code a bit.
Old question, but for versions of TypeScript starting with 3.1, you can simply do the property assignment as you would in plain JS, as long as you use a function declaration or the `const` keyword for your variable:

```
function f () {}
f.someValue = 3; // fine
const g = function () {};
g.someValue = 3; // also fine
var h = function () {};
h.someValue = 3; // Error: "Property 'someValue' does not exist on type '() => void'"

```

[Reference](https://www.typescriptlang.org/docs/handbook/release-notes/typescript-3-1.html#properties-declarations-on-functions) and [online example](https://www.typescriptlang.org/play/index.html#src=function%20f%20()%20%7B%7D%0D%0Af.someValue%20%3D%203%3B%0D%0Aconst%20g%20%3D%20function%20()%20%7B%7D%3B%0D%0Ag.someValue%20%3D%203%3B%0D%0Avar%20h%20%3D%20function%20()%20%7B%7D%3B%0D%0Ah.someValue%20%3D%203%3B%0D%0A).