In the discussion on #328 the consensus seems to be that people like type definitions. This moves toward generating types using jsdoc as suggested by @bollwyvl in that thread.

I don't have much Typescript experience so I would very much appreciate it if people could test them out. The types are available as CircleCI artifacts here:
https://3914-322074228-gh.circle-artifacts.com/0/root/repo/build/pyodide.d.ts

@bollwyvl said that

> types that aren't tested are probably worse than no types at all

If anyone could contribute tests, that would be very helpful (I don't know what they should look like). 

The main limitation I ran into with this approach is that Typescript supports Typescript types in jsdoc annotations but jsdoc does not. This means that if we want to automatically generate docs, we have to stick to the much more limited syntax that jsdoc supports. For example, `isPyProxy` should be typed `obj is PyProxy` but this approach does not allow that as far as I can tell. 
Some basic types. In the discussion on #328 the consensus seems to be that people like type definitions. This moves toward generating types using jsdoc as suggested by @bollwyvl in that thread.

I don't have much Typescript experience so I would very much appreciate it if people could test them out. The types are available as CircleCI artifacts here:
https://3914-322074228-gh.circle-artifacts.com/0/root/repo/build/pyodide.d.ts

@bollwyvl said that

> types that aren't tested are probably worse than no types at all

If anyone could contribute tests, that would be very helpful (I don't know what they should look like). 

The main limitation I ran into with this approach is that Typescript supports Typescript types in jsdoc annotations but jsdoc does not. This means that if we want to automatically generate docs, we have to stick to the much more limited syntax that jsdoc supports. For example, `isPyProxy` should be typed `obj is PyProxy` but this approach does not allow that as far as I can tell. 
PNG


IHDRߊsRGB	pHYs+ IDATxytTםIزo,ӢVQZElz#KZ+G=GRhU@*\Z5`CBLf"dfLy>9gb}q]|::t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`@R'(.R[.8L+??_5o<x≝zs꥗^jw{ 4{߯o/Oީϴ~z***_N5d
6L#Fuj8p`?ĉi+))IÆ
S~~ƍٳgk̙JKKFz^{v=Z_uQ^^#Fܹs5|.?vڻwiėu]+|?}G`0ء9{찏VZv7nB!'p'Mܔ.sѮ]::ѿ/vwc#F!qܳ>}:m#]X!^j׮]/SO=U[ltzzKgq.\?0ӑ$jڵ0anV566{J=A֭ĉu7.SJhj˖-2e."}AvءGZfM+<#2e}xO|rM:U%%%NL4669{5ydmݺ5SA!455ꫯֵ^$K/Ooj=ywu룏>TzRwyz'=$n<lպ{=ٻwfϞxO%fۧ9sE466jѢEz7=$nҥKaÆxO#l޼Y_}){9-)S4o<}W
֢ty)999뺮gϞΩB!]q*((mP466jQ!##CǏWNN|}QڹsgTںu~׿5Jw\UPPk޲e?ꫯ---MguV\;
TvRMMM
7ܠ]zxׯ_>QDm2StywڴiQ±|c>F


b_*ۻm-n-&Mr_~e75VrSSS#/33-++x]+8>nZZZל]O޶v)tKwǏ֭[#>fft{ɓ'kӦMZfRRR]reTUTT)|P=PQwyg1~_7|{=M6MII;h%K9vleeͬdeek|S[VVUVhf_~3go߮Z뭷hfHDqGW^ye+[kjj/v5sLUVVvv'jċ/_+Vpرcyfvia=r]7FYF+38#D]1RRRzjp
aǽk	9bRg֢Eyꩧ\nnn4gwz~aͺK
sG999G}u|^$%%Sw^1Uz4`vܹ3aIwygإn]3<!^lժUJOOowƍڣt)D|[j
]gg?Ѽy󢺺{ɓ+~aNϱp	ظqcf'NM7vwm0`?"XFFf͚ڣOOO׆
4v؈~z]q]gGڵKf͊n[M4I&M{n/,,Lb'kc4aʔ)6lX~];n/СC/GDk׮-uTqqOGh"\Gs"?Y\uĉaO5g/s'-C{HQno/uܸqڰaCC-VXS눪*͜9S{8vΜ9z/|>_عp63xv;W{___r;~ꩧw?EAsqYgad#]HHο)"*ku+aANoWEs]W^z^~nC0~3kǞp	zXC?z,Xwy[ҳ>qȑ#i&eeeu+Rv[q\nye˖sq999ڴi-tvGuZYYf̘V^qiV[%륗^
umYF,8P3fO>,Yq\rrzꩈK@_Gцw{~ᇚ3g:YG̙3;~ܡCn5em߾=ؖ%by晨n{:
k>wq1XB]tQz/W_ًӵqF?ݻÎ}xb]6>L\pATK|.
g444O?4*SHxr^}հ;Czؿ/o~}iƌQ/bŊ:ދaN3///ӑ%bW\y%bsIW^СCZhQ7a3gN%b׭[w;wvkYpljjj5\]v7wn{Ύ,h"mڴI`P_|1K@^棏>ҙgG}4츱cǆ},`IWmFiQGn몺ZwK/u֩!-_\>+R%%%;#>K_~9rdqLiiiB#Qw)D3O{o]%%%z衇8,
$?^=
t܍ӓO>)qzy|mOrr~itnB
iY<:D7,:cƌM݈LmذAsN̞eSN9C_ǒ&Lжmty[;vlTYzAӵb
رCw6heIW9<y.ڵK7|)iܸqZpa1oc4{m-J_~yTK+??_voeD?R`fqK&"/߳G{QFFF(^VVta7ITޅkp/߯_`Rnnnؕ&z@ۻv _sW>Ce:Lr'r;vE'=QOtE<jԨͤwxUTTv_}AYSN
/W(l"O.??F;w;f1MkhhUW]v߯ì.(7|S{of^0ԥ^v?agճZ^s]]]cZlY#K~aAYӦMx!-ܢe˖=oӾM6MNqϗѬz֗_~3gj۶ma'?1󚻢N]w]#8'N'Y!tt~t0p@-]4옦&y:ӵyVQQx@'tۿr-1YϩҚ5kt'_Wرk:u}ɍg1!.\Wm]w|IU2335aegg}@@*((PSSST_s5h]zg}V~iJJJTPPѐ%KhĈ=<}5kV\;
\;wTMMMT_sgj]zxZn="0mРAZz,XqF*++#	&hٲe]~BvÌzޤIt뭷u555ڸqc\T=#]~1S;üy;4:%##C/BZ(;;[ׯWjjj+84iR8#-[.,T=q}Xs=u>O4o޼xO	xGtwUƌz+.o/ƍӶmtg{*BJJy-Y$SAHـntRmذ!az}>.}e]~;a$s=W۶mܹs=$.#^1qraPTuTN>}>#]V+WԞ={}5sL-_G3f讻I'
zn6Bc"}@}kV;(ozpWP+o푠?dŋxbm߾]?x
HyHJJСC1ch֬Y={w:5=Zf҅^xO-!9\
>\Ç׹瞫smrܞ	>0Ѫu.M:;]::+f8+::+'kMnt#>;nE@5tZ],n}'(n
JsX/ָ
]na/2.9P:}ur:t @0`A:t @0`A:t 8&un'>6.?(W${H\鎾5/\y /Cm|R`~7\t̕}_SZ7Pjk\9O0dOٹע2bW
cmt+wO4Gr7i
jl)N3$KrT(m[y:|/IӠܨo;)I::$GDuwOPШ@{:8Rj1jW>5#o5fBQ =!
[+'ϧ4z8lGc׸Im]UvOM_:P>9tAW%ESe::wfO9CZȧ9mΉgf;BlJ\UW=ܞytqhpp=}AGjk\m+NIs3wώGyCed9i/eZ<t_Z>	~gqCqL㨮N*-oJOy?2eks<-ç̬8{OJTyu)5.<`aQ܃x:lrU]R/9v=vmg陎2[㛕SfNZiqH<SVO?IQ۷t`rxc8G#PTR&wZrZ3ؑHu\xSFOI޸GY͇CA$tsW۞?Ⳡ;4*xtX:ª=j)isoYʊCEHlRyPu3cotUVҡZWE_US\Q_Guwa\˅)r|l$g4oQRV4/!U^hKCm(
o熏+;ϑorG

KCoޣNMsh G}J(*+BjOPʚSFG9.-eUZKA^TSmB:ؼ̀G 7t冤ծz](oXUe!TQw=PȻ½5ƹC}mnG+-`u Vy8)Go"舨eu[8&-ç#|ʐKCrJSfve|^<j
z}{m!9֯tcWDtUiI^rjk~C
/Ե5{~)+ǧt8%*˽8;!CAW}:k|VI$GY>
ׅA56f-Ђ#,qTWj
5Z#R4W**wmMH^iZq{Ǒ'|F=)z8ǒ~i>f9:"
4(su*,r|J]r޻;SHJ8y*[#7ۥ|	㒔#JK'';Jn^Ƶ;j?f4p`kzsZ3USȷ~iտԯ#9x{xiX:RS-2nv]WU!&#U{ZΟ;FW[^nԮO'LRZw~XvUSyt:tZTU
x㒎:Pzu];z~<Oo5yv%޹tsc[Tq$n[C\RS5+UUTQ޺+\@
Yr{rzwOPU6edz:z<:jux}]۽wSs]Wͫ:cm;JW%Ek96ү~X5$JB[M>;t^]ώ*$WS𳠂/h^&s>
IooҀr$>eszmcMۛWzoPSv}TI{8!56Qg~}!%%ycG#*(- ]6+]Q[F-cZWu*f8ңDm{~苸(:tp\n5/rU_YΠέ{:pHIDAT:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A?t	lniTXtXML:com.adobe.xmp<?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?>
<x:xmpmeta xmlns:x='adobe:ns:meta/'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>

 <rdf:Description rdf:about=''
  xmlns:Attrib='http://ns.attribution.com/ads/1.0/'>
  <Attrib:Ads>
   <rdf:Seq>
    <rdf:li rdf:parseType='Resource'>
     <Attrib:Created>2020-10-26</Attrib:Created>
     <Attrib:ExtId>4d44af96-13ec-418f-bc6f-b0b81670e6ae</Attrib:ExtId>
     <Attrib:FbId>525265914179580</Attrib:FbId>
     <Attrib:TouchType>2</Attrib:TouchType>
    </rdf:li>
   </rdf:Seq>
  </Attrib:Ads>
 </rdf:Description>

 <rdf:Description rdf:about=''
  xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
  <pdf:Author>Александра Жейнова</pdf:Author>
 </rdf:Description>

 <rdf:Description rdf:about=''
  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>
  <xmp:CreatorTool>Canva</xmp:CreatorTool>
 </rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end='r'?>cIENDB`
PNG


IHDRߊsRGB	pHYs+ IDATxytTםIزo,ӢVQZElz#KZ+G=GRhU@*\Z5`CBLf"dfLy>9gb}q]|::t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`@R'(.R[.8L+??_5o<x≝zs꥗^jw{ 4{߯o/Oީϴ~z***_N5d
6L#Fuj8p`?ĉi+))IÆ
S~~ƍٳgk̙JKKFz^{v=Z_uQ^^#Fܹs5|.?vڻwiėu]+|?}G`0ء9{찏VZv7nB!'p'Mܔ.sѮ]::ѿ/vwc#F!qܳ>}:m#]X!^j׮]/SO=U[ltzzKgq.\?0ӑ$jڵ0anV566{J=A֭ĉu7.SJhj˖-2e."}AvءGZfM+<#2e}xO|rM:U%%%NL4669{5ydmݺ5SA!455ꫯֵ^$K/Ooj=ywu룏>TzRwyz'=$n<lպ{=ٻwfϞxO%fۧ9sE466jѢEz7=$nҥKaÆxO#l޼Y_}){9-)S4o<}W
֢ty)999뺮gϞΩB!]q*((mP466jQ!##CǏWNN|}QڹsgTںu~׿5Jw\UPPk޲e?ꫯ---MguV\;
TvRMMM
7ܠ]zxׯ_>QDm2StywڴiQ±|c>F


b_*ۻm-n-&Mr_~e75VrSSS#/33-++x]+8>nZZZל]O޶v)tKwǏ֭[#>fft{ɓ'kӦMZfRRR]reTUTT)|P=PQwyg1~_7|{=M6MII;h%K9vleeͬdeek|S[VVUVhf_~3go߮Z뭷hfHDqGW^ye+[kjj/v5sLUVVvv'jċ/_+Vpرcyfvia=r]7FYF+38#D]1RRRzjp
aǽk	9bRg֢Eyꩧ\nnn4gwz~aͺK
sG999G}u|^$%%Sw^1Uz4`vܹ3aIwygإn]3<!^lժUJOOowƍڣt)D|[j
]gg?Ѽy󢺺{ɓ+~aNϱp	ظqcf'NM7vwm0`?"XFFf͚ڣOOO׆
4v؈~z]q]gGڵKf͊n[M4I&M{n/,,Lb'kc4aʔ)6lX~];n/СC/GDk׮-uTqqOGh"\Gs"?Y\uĉaO5g/s'-C{HQno/uܸqڰaCC-VXS눪*͜9S{8vΜ9z/|>_عp63xv;W{___r;~ꩧw?EAsqYgad#]HHο)"*ku+aANoWEs]W^z^~nC0~3kǞp	zXC?z,Xwy[ҳ>qȑ#i&eeeu+Rv[q\nye˖sq999ڴi-tvGuZYYf̘V^qiV[%륗^
umYF,8P3fO>,Yq\rrzꩈK@_Gцw{~ᇚ3g:YG̙3;~ܡCn5em߾=ؖ%by晨n{:
k>wq1XB]tQz/W_ًӵqF?ݻÎ}xb]6>L\pATK|.
g444O?4*SHxr^}հ;Czؿ/o~}iƌQ/bŊ:ދaN3///ӑ%bW\y%bsIW^СCZhQ7a3gN%b׭[w;wvkYpljjj5\]v7wn{Ύ,h"mڴI`P_|1K@^棏>ҙgG}4츱cǆ},`IWmFiQGn몺ZwK/u֩!-_\>+R%%%;#>K_~9rdqLiiiB#Qw)D3O{o]%%%z衇8,
$?^=
t܍ӓO>)qzy|mOrr~itnB
iY<:D7,:cƌM݈LmذAsN̞eSN9C_ǒ&Lжmty[;vlTYzAӵb
رCw6heIW9<y.ڵK7|)iܸqZpa1oc4{m-J_~yTK+??_voeD?R`fqK&"/߳G{QFFF(^VVta7ITޅkp/߯_`Rnnnؕ&z@ۻv _sW>Ce:Lr'r;vE'=QOtE<jԨͤwxUTTv_}AYSN
/W(l"O.??F;w;f1MkhhUW]v߯ì.(7|S{of^0ԥ^v?agճZ^s]]]cZlY#K~aAYӦMx!-ܢe˖=oӾM6MNqϗѬz֗_~3gj۶ma'?1󚻢N]w]#8'N'Y!tt~t0p@-]4옦&y:ӵyVQQx@'tۿr-1YϩҚ5kt'_Wرk:u}ɍg1!.\Wm]w|IU2335aegg}@@*((PSSST_s5h]zg}V~iJJJTPPѐ%KhĈ=<}5kV\;
\;wTMMMT_sgj]zxZn="0mРAZz,XqF*++#	&hٲe]~BvÌzޤIt뭷u555ڸqc\T=#]~1S;üy;4:%##C/BZ(;;[ׯWjjj+84iR8#-[.,T=q}Xs=u>O4o޼xO	xGtwUƌz+.o/ƍӶmtg{*BJJy-Y$SAHـntRmذ!az}>.}e]~;a$s=W۶mܹs=$.#^1qraPTuTN>}>#]V+WԞ={}5sL-_G3f讻I'
zn6Bc"}@}kV;(ozpWP+o푠?dŋxbm߾]?x
HyHJJСC1ch֬Y={w:5=Zf҅^xO-!9\
>\Ç׹瞫smrܞ	>0Ѫu.M:;]::+f8+::+'kMnt#>;nE@5tZ],n}'(n
JsX/ָ
]na/2.9P:}ur:t @0`A:t @0`A:t 8&un'>6.?(W${H\鎾5/\y /Cm|R`~7\t̕}_SZ7Pjk\9O0dOٹע2bW
cmt+wO4Gr7i
jl)N3$KrT(m[y:|/IӠܨo;)I::$GDuwOPШ@{:8Rj1jW>5#o5fBQ =!
[+'ϧ4z8lGc׸Im]UvOM_:P>9tAW%ESe::wfO9CZȧ9mΉgf;BlJ\UW=ܞytqhpp=}AGjk\m+NIs3wώGyCed9i/eZ<t_Z>	~gqCqL㨮N*-oJOy?2eks<-ç̬8{OJTyu)5.<`aQ܃x:lrU]R/9v=vmg陎2[㛕SfNZiqH<SVO?IQ۷t`rxc8G#PTR&wZrZ3ؑHu\xSFOI޸GY͇CA$tsW۞?Ⳡ;4*xtX:ª=j)isoYʊCEHlRyPu3cotUVҡZWE_US\Q_Guwa\˅)r|l$g4oQRV4/!U^hKCm(
o熏+;ϑorG

KCoޣNMsh G}J(*+BjOPʚSFG9.-eUZKA^TSmB:ؼ̀G 7t冤ծz](oXUe!TQw=PȻ½5ƹC}mnG+-`u Vy8)Go"舨eu[8&-ç#|ʐKCrJSfve|^<j
z}{m!9֯tcWDtUiI^rjk~C
/Ե5{~)+ǧt8%*˽8;!CAW}:k|VI$GY>
ׅA56f-Ђ#,qTWj
5Z#R4W**wmMH^iZq{Ǒ'|F=)z8ǒ~i>f9:"
4(su*,r|J]r޻;SHJ8y*[#7ۥ|	㒔#JK'';Jn^Ƶ;j?f4p`kzsZ3USȷ~iտԯ#9x{xiX:RS-2nv]WU!&#U{ZΟ;FW[^nԮO'LRZw~XvUSyt:tZTU
x㒎:Pzu];z~<Oo5yv%޹tsc[Tq$n[C\RS5+UUTQ޺+\@
Yr{rzwOPU6edz:z<:jux}]۽wSs]Wͫ:cm;JW%Ek96ү~X5$JB[M>;t^]ώ*$WS𳠂/h^&s>
IooҀr$>eszmcMۛWzoPSv}TI{8!56Qg~}!%%ycG#*(- ]6+]Q[F-cZWu*f8ңDm{~苸(:tp\n5/rU_YΠέ{:pHIDAT:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A:t @0`A?t	lniTXtXML:com.adobe.xmp<?xpacket begin='﻿' id='W5M0MpCehiHzreSzNTczkc9d'?>
<x:xmpmeta xmlns:x='adobe:ns:meta/'>
<rdf:RDF xmlns:rdf='http://www.w3.org/1999/02/22-rdf-syntax-ns#'>

 <rdf:Description rdf:about=''
  xmlns:Attrib='http://ns.attribution.com/ads/1.0/'>
  <Attrib:Ads>
   <rdf:Seq>
    <rdf:li rdf:parseType='Resource'>
     <Attrib:Created>2020-10-26</Attrib:Created>
     <Attrib:ExtId>4d44af96-13ec-418f-bc6f-b0b81670e6ae</Attrib:ExtId>
     <Attrib:FbId>525265914179580</Attrib:FbId>
     <Attrib:TouchType>2</Attrib:TouchType>
    </rdf:li>
   </rdf:Seq>
  </Attrib:Ads>
 </rdf:Description>

 <rdf:Description rdf:about=''
  xmlns:pdf='http://ns.adobe.com/pdf/1.3/'>
  <pdf:Author>Александра Жейнова</pdf:Author>
 </rdf:Description>

 <rdf:Description rdf:about=''
  xmlns:xmp='http://ns.adobe.com/xap/1.0/'>
  <xmp:CreatorTool>Canva</xmp:CreatorTool>
 </rdf:Description>
</rdf:RDF>
</x:xmpmeta>
<?xpacket end='r'?>cIENDB`