In TypeScript, I can do this:

```
interface Prop {
    prop_a? : number,
    prop_b? : string,
    prop_c? : string
}

function aa({prop_a, prop_b, prop_c}: Prop) {
    console.log('aa: ' + prop_a + ' ' + prop_b + ' ' + prop_c)
}

```

But then, why this is not allowed:

```
//A binding pattern parameter cannot be optional in an implementation signature.(2463)
function aaa({prop_a?: number, prop_b?: string, prop_c?: string}) {
    console.log('aa: ' + prop_a + ' ' + prop_b + ' ' + prop_c)
}

```

Also, specifying types of dictionary keys even if they are non-optional (that is removinb `?` from above snippet) is not allowed:

```
function aaaa({prop_a: number, prop_b: string, prop_c: string}) {
    console.log('aa: ' + prop_a + ' ' + prop_b + ' ' + prop_c)
}

```

Is it just language design choice or its indeed allowed, but am missing something?