Я ожидаю, что новые возможности TypeScript 3.7 будут поддерживать эти случаи:
export interface Foo { aaa: string; bbb: string; ccc: string; } export interface Bar { ddd: string; eee: string; fff: string; } type Data = Foo | Bar; const doSomething = (data: Data) => { const optionalChaining = data?.aaa //error const nullishCoalescing = data.bbb ?? "default"; //error if ("ccc" in data) { //OK this works } }
Есть ли другой способ справиться с этим, кроме последнего, который также работал в более ранних версиях ts? детская площадка: http://www.typescriptlang.org/play/?ts=3.7-Beta#code/KYDwDg9gTgLgBASwHY2FAZgQwMbDgMQgjgG8BYAKDjk1oC44BnGKZAcwG5LqAjPh5qySducbOIEt2XCgF9KlUJFiIUaLLjgAhTFFKiAJkclCRVOMEsnpo9HevCZ8ipRgBPMHgAimGJjgAvAREcAA+2roylNgQSMxwBhAAyhAAtsAwABbsgXAAFAa+mAw+fgCUgQB8+uYxcfAQYDAIsZgANgDCmZjIOUGFfgD8AHS0mKJ18UgArm1tCIyZHRDtwIzYfQlFw3w8cIODcABEBsBYszBHUeYI6PlH4thHqlvlNdTUAPSfAPIA0nAsgs4AB3aAAa0YomcziAA