Skip to content

Object is possibly null message in strange case #34795

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Closed
frolovdev opened this issue Oct 29, 2019 · 2 comments
Closed

Object is possibly null message in strange case #34795

frolovdev opened this issue Oct 29, 2019 · 2 comments

Comments

@frolovdev
Copy link

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

@fatcerberus
Copy link

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
Copy link
Author

@fatcerberus Thanks for fast response. I close the issue.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants