Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Repo info
Activity
  • 04:49
    kitsonk opened #34531
  • 04:28
    typescript-bot synchronize #33929
  • 02:45
    connorjclark opened #34530
  • 02:40
    connorjclark edited #34529
  • 02:38
    connorjclark opened #34529
  • 01:09
    typescript-bot opened #34528
  • Oct 16 23:24
    typescript-bot synchronize #34506
  • Oct 16 22:59
    andrewbranch synchronize #33937
  • Oct 16 22:56
    sheetalkamat labeled #34502
  • Oct 16 22:56
    sandersn synchronize #15575
  • Oct 16 22:56
    sandersn synchronize #28460
  • Oct 16 22:56
    sandersn synchronize #31641
  • Oct 16 22:56

    sandersn on dedupe-inherited-jsdoc

    (compare)

  • Oct 16 22:56

    sandersn on master

    Dedupe inherited jsdoc comments… (compare)

  • Oct 16 22:56
    sandersn closed #34522
  • Oct 16 22:56
    sandersn closed #32708
  • Oct 16 22:43
    sheetalkamat synchronize #34525
  • Oct 16 22:43

    sheetalkamat on testChanges

    Fix lint rules (compare)

  • Oct 16 22:40
    typescript-bot synchronize #34506
  • Oct 16 22:40
    sheetalkamat review_requested #34527
Gareth Jones
@G-Rath
why doesn't it give you an expression of that type? b/c as you say, it's syntactic sugar, so it does give that expression in Node (iirc)
AnyhowStep
@AnyhowStep
If it did return a promise, this would work,
function returnPromise () : Promise<number> {
  return (await 1);
}
Gareth Jones
@G-Rath
which it does
once you add the missing async keyword
AnyhowStep
@AnyhowStep
image.png
Exactly. The async part is the problem here
Gareth Jones
@G-Rath
oh ffs
no wait what
async is in my code
for a second I thought it was I'd just missed async, but nope: async is there
so your example doesn't really relate to mine, as far as I can tell
AnyhowStep
@AnyhowStep

function takesNumberOnly (x : number) {
  console.log(x+1);
}
async function returnPromise ()  {
  const x = await 1;
  takesNumberOnly(x);
  takesNumberOnly(await 1);
}
If (await 1) is an expression of type Promise<number>
Then the second call to takesNumberOnly would not work
Gareth Jones
@G-Rath
Yeah I see. and you're right; this is turning how I figured it would
it's contextual, but too complex to type like that
AnyhowStep
@AnyhowStep
It's sytactic sugar for,
function returnPromise2 ()  {
  Promise.resolve(1)
    .then((x) => {
      takesNumberOnly(x);
      Promise.resolve(1)
        .then((y) => {
          takesNumberOnly(y);
        });
    });
}
Gareth Jones
@G-Rath
yeah yeah
AnyhowStep
@AnyhowStep
gdi gitter highlighting
Gareth Jones
@G-Rath
you need to add ts
im actually slightly disppointed in myself for not putting that together XD
but cheers for the sanity check
AnyhowStep
@AnyhowStep
Sometimes, adding ts doesn't make it any better =x
No problem <3
Gareth Jones
@G-Rath
yeah I know
but so yeah: it's b/c of the await in the inner fn
also ugh ffs my whole fn is redundant XD which is annoying b/c I thought that originally :joy:
AnyhowStep
@AnyhowStep
I didn't even notice till you said it =x
I need to up my code review skillz
Bruce Pascoe
@fatcerberus
(await 1) is expression of type number
It auto-wraps 1 in a promise and then unwraps it
You basically just waited an extra tick for a value you already had :P
AnyhowStep
@AnyhowStep
Kick him down some more :soccer:
Derya Aydede
@Derya
is async/await actually just syntactic sugar?
i was under the impression that it actually is not the exact same as the non-async equivalent

Without await, promises in for loops would be a hassle, especially if each iteration depends on the previous iteration (so no Promise.all())
I think you have to actually use a recursive function for the loop if you can't use await.

Memory is rusty and I'm too lazy to try it out

Derya Aydede
@Derya
yeah you'd have to make some nightmarish construct
thank you based async/await
Bruce Pascoe
@fatcerberus
It’s syntactic sugar as far as the behavior goes, but it being syntax makes it a lot easier to write certain constructs, like AnyhowStep says
The main advantage is you can use the value of a promise at expression-level
Whereas with .then() it’s just one step above callback hell
But other than that it's still just vanilla promise semantics under the hood, right down to the duck-typed .then
The best way to describe it is to imagine the async function is a generator, and await does something like Promise.then(x => currentGenerator.next(x)); yield;
Bruce Pascoe
@fatcerberus
Destructuring in function parameter lists still confuses the hell out of me: microsoft/TypeScript#33474
I look at the signature and it's like... okay... now exactly what am I supposed to provide at the callsite for that
I have to mentally reconstruct the destructuring in order to know what to pass to it
AnyhowStep
@AnyhowStep
Fuck that mess lol
Bruce Pascoe
@fatcerberus
I don't see how using the nightly helps, nightlies don't include unmerged PR features do they?
Bruce Pascoe
@fatcerberus
https://github.com/microsoft/TypeScript/issues/33475#issuecomment-532443362 - writing this up made me realize that classes should really always be nominally typed (even if there are no private properties) because of instanceof