What does ?: mean in Typescript?

I found the following in a TypeScript declaration file for Angular:

interface IDirective{
    compile?:
        (templateElement: IAugmentedJQuery,

What does the ?: after compile do?


See: Walkthrough: Interfaces | TypeScript :: Describing Simple Types.

Basically, ? marks the member as being optional in the interface.

(EDIT: As noted in comments, this is not restricted to interfaces.)


In this case, the ?: is not a single operator, but rather two operators:

  • ? (optional),

  • : (specify type).

In other languages/cases, ?: would be the Elvis Operator.