Description
TypeScript Version: 3.6.3 or 3.7-Beta
Search Terms:
Object is possibly null, typescript message
Code
type Money = {
value: number;
currency: string;
}
type Stock = {
realtimeDataPeek: {
ask: Money;
}
}
type DataIn = { data: { investmentStocks: { stock: Stock }, billing: { mainAccounts: {balance: Money}[]} }}
type DataOut = {
stock: Stock | null;
balance: number;
min: number;
}
const responseToProps = ({ data }: DataIn): DataOut => {
let stock: Stock | null = null;
if (data && data.investmentStocks && data.investmentStocks.stock) {
stock = data.investmentStocks.stock;
}
let balanceObject: { balance: number; min: number } | null = null;
if (data && data.billing && stock) {
const result = data.billing.mainAccounts.find(
({ balance }) => balance.currency === stock.realtimeDataPeek.ask.currency
);
const balance = result ? result.balance.value : 0;
balanceObject = { min: stock.realtimeDataPeek.ask.value, balance };
}
if (!balanceObject) {
const fallback = { balance: 0, min: 0, stock: null };
return fallback;
}
return { stock, ...balanceObject };
};
Expected behavior:
Like in 33 line
Actual behavior:
stock object is possibly null
Playground Link:
https://www.typescriptlang.org/play/index.html?ssl=42&ssc=3&pln=1&pc=1#code/FAFwngDgpgBAsgewHZTDAvDA3sGMBuAhgDYCuUAXDEqQLYBGUATgNy4wDGpTTUSHYKgGcQTAJZIA5mwC+wUJFgBlEAg4BrDNna8SIMbSgARQiEIAFKFHVUcePISE34yVGzxy5C6DBNmAkkhaWDAAJqaEtjAS+FAihkggKmrqQlEiKVTJGjAyADQw9GLExBKSUbSEEgCCHBwIpIlp2PQkhPyULihgMgDaALoyuXLgPn6EAPKkIMHsGRpZqjkAPtSkJe6FbR1UNAzMm7QSu3SMrMBe9UgiMLxCEMhCUAAqCOZMCBBCWgAUIeFmXJUcaBACUwIiUxm6AAfNo8MQoDN5s5sppVjQSlpMcRNmIAGYwH4AwgwABkZLCEQAdDE4iAEkklqlyZSSbSkLF4nwmSkhNSUaD4fYUVp2XTuYk0fyUZsvAikVtiO0OFAJvQAFZQDggKKtZU7Nb7VgwI5IE7G3IwDHrYjY214wnEiKsqlmalFEplV2C4V4K43O7raFuwge4qlKTUyo1OoNJrU-ESUI-dj2IkhfUq2AyIWwpXZ6lcHh8AQYdCYFHU3TEfSGcaWazUxzqIvcXj8MBpmCgzb+x4zLMdLRB2swAD8tziwY921V1KIZFgVAADGxu0PVeqtTrgqbjjAqzW68YIo3Wy2FyRyAVNzm5fI8ASiQBCO-b7UgIV2ewBmb4khiFaHJMEzOdOhXAozVXAoUROLEZD7KcQG4IIAJKYD1AfHQkVQ7BD2ZApqWI99NU-XJZBYIA
Activity
fatcerberus commentedon Oct 29, 2019
Narrowings are discarded at function boundaries (except IIFEs) because the compiler doesn’t know in general when or how many times a lambda will be called. Use
!
(non-null assertion) in cases like this if you’re sure it can’t be nullish.See discussion in #9998.
frolovdev commentedon Oct 29, 2019
@fatcerberus Thanks for fast response. I close the issue.