// @strictNullChecks: true // @noLib: true type Readonly = {readonly [K in keyof T]: T[K]} interface A { params?: { name: string; }; } class Test { attrs: Readonly; m() { this.attrs.params!.name; } } interface Foo { foo?: number; } class FooClass

{ properties: Readonly

; foo(): number { const { foo = 42 } = this.properties; return foo; } } class Test2 { attrs: Readonly; m() { return this.attrs.params!; // Return type should maintain relationship with `T` after being not-null-asserted, ideally } }