The starter files for the Tasty TypeScript course.
npm i && npm start
Starter Files and answers
There are 2 folders related to the dad-jokes
exercise in the exercises
folder. The dad-jokes
contains the solution code and the dad-jokes-start
contains the starter files.
This should be removed as it's a duplicate solution.
https://github.com/wesbos/Tasty-TypeScript/tree/main/exercises/dad-jokes
There is already a dad-jokes
in the finished-exercises
folder but it's jokes.ts
file is shorter (62 lines) than the completed file (78 lines) so that should be corrected.
Hey Wes,
After installing and starting the Vite server I run into this error. This seems to be related to the packages being imported in the folders finished-files/hotdog
and exercises/hotdog
. The exercises/hotdog
seems to be a duplicate of the finished version that is in the starter exercise folder.
The starter folder exercises/hotdog-start
doesn't throw an issue but I suspect that is just because nothing is being imported.
> [email protected] start
> vite
VITE v3.2.2 ready in 123 ms
➜ Local: http://localhost:7777/
➜ Network: http://172.30.49.117:7777/
✘ [ERROR] Could not resolve "@tensorflow/tfjs-converter"
node_modules/@tensorflow-models/coco-ssd/dist/coco-ssd.es2017.esm.min.js:17:86:
17 │ ..."object"==typeof exports&&"undefined"!=typeof module?a(exports,require("@tensorflow/tfjs-converter"),require("@tensorflow/tfjs-core")):"function"==typeof define&&define.a...
╵ ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
You can mark the path "@tensorflow/tfjs-converter" as external to exclude it from the bundle,
which will remove this error. You can also surround this "require" call with a try/catch block to
handle this failure at run-time instead of bundle-time.
✘ [ERROR] Could not resolve "@tensorflow/tfjs-core"
node_modules/@tensorflow-models/coco-ssd/dist/coco-ssd.es2017.esm.min.js:17:124:
17 │ ...d"!=typeof module?a(exports,require("@tensorflow/tfjs-converter"),require("@tensorflow/tfjs-core")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/t...
╵ ~~~~~~~~~~~~~~~~~~~~~~~
You can mark the path "@tensorflow/tfjs-core" as external to exclude it from the bundle, which
will remove this error. You can also surround this "require" call with a try/catch block to handle
this failure at run-time instead of bundle-time.
/home/asjas/git/Tasty-TypeScript/node_modules/esbuild/lib/main.js:1566
let error = new Error(`${text}${summary}`);
^
Error: Build failed with 2 errors:
node_modules/@tensorflow-models/coco-ssd/dist/coco-ssd.es2017.esm.min.js:17:86: ERROR: Could not resolve "@tensorflow/tfjs-converter"
node_modules/@tensorflow-models/coco-ssd/dist/coco-ssd.es2017.esm.min.js:17:124: ERROR: Could not resolve "@tensorflow/tfjs-core"
at failureErrorWithLog (/home/asjas/git/Tasty-TypeScript/node_modules/esbuild/lib/main.js:1566:15)
at /home/asjas/git/Tasty-TypeScript/node_modules/esbuild/lib/main.js:1024:28
at runOnEndCallbacks (/home/asjas/git/Tasty-TypeScript/node_modules/esbuild/lib/main.js:1438:61)
at buildResponseToResult (/home/asjas/git/Tasty-TypeScript/node_modules/esbuild/lib/main.js:1022:7)
at /home/asjas/git/Tasty-TypeScript/node_modules/esbuild/lib/main.js:1134:14
at responseCallbacks.<computed> (/home/asjas/git/Tasty-TypeScript/node_modules/esbuild/lib/main.js:671:9)
at handleIncomingPacket (/home/asjas/git/Tasty-TypeScript/node_modules/esbuild/lib/main.js:726:9)
at Socket.readFromStdout (/home/asjas/git/Tasty-TypeScript/node_modules/esbuild/lib/main.js:647:7)
at Socket.emit (node:events:517:28)
at addChunk (node:internal/streams/readable:368:12) {
errors: [
{
detail: undefined,
id: '',
location: {
column: 86,
file: 'node_modules/@tensorflow-models/coco-ssd/dist/coco-ssd.es2017.esm.min.js',
length: 28,
line: 17,
lineText: '!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?a(exports,require("@tensorflow/tfjs-converter"),require("@tensorflow/tfjs-core")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/tfjs-converter","@tensorflow/tfjs-core"],a):a((e=e||self).cocoSsd=e.cocoSsd||{},e.tf,e.tf)}(this,(function(e,a,m){"use strict";const i={1:{name:"/m/01g317",id:1,displayName:"person"},2:{name:"/m/0199g",id:2,displayName:"bicycle"},3:{name:"/m/0k4j",id:3,displayName:"car"},4:{name:"/m/04_sv",id:4,displayName:"motorcycle"},5:{name:"/m/05czz6l",id:5,displayName:"airplane"},6:{name:"/m/01bjv",id:6,displayName:"bus"},7:{name:"/m/07jdr",id:7,displayName:"train"},8:{name:"/m/07r04",id:8,displayName:"truck"},9:{name:"/m/019jd",id:9,displayName:"boat"},10:{name:"/m/015qff",id:10,displayName:"traffic light"},11:{name:"/m/01pns0",id:11,displayName:"fire hydrant"},13:{name:"/m/02pv19",id:13,displayName:"stop sign"},14:{name:"/m/015qbp",id:14,displayName:"parking meter"},15:{name:"/m/0cvnqh",id:15,displayName:"bench"},16:{name:"/m/015p6",id:16,displayName:"bird"},17:{name:"/m/01yrx",id:17,displayName:"cat"},18:{name:"/m/0bt9lr",id:18,displayName:"dog"},19:{name:"/m/03k3r",id:19,displayName:"horse"},20:{name:"/m/07bgp",id:20,displayName:"sheep"},21:{name:"/m/01xq0k1",id:21,displayName:"cow"},22:{name:"/m/0bwd_0j",id:22,displayName:"elephant"},23:{name:"/m/01dws",id:23,displayName:"bear"},24:{name:"/m/0898b",id:24,displayName:"zebra"},25:{name:"/m/03bk1",id:25,displayName:"giraffe"},27:{name:"/m/01940j",id:27,displayName:"backpack"},28:{name:"/m/0hnnb",id:28,displayName:"umbrella"},31:{name:"/m/080hkjn",id:31,displayName:"handbag"},32:{name:"/m/01rkbr",id:32,displayName:"tie"},33:{name:"/m/01s55n",id:33,displayName:"suitcase"},34:{name:"/m/02wmf",id:34,displayName:"frisbee"},35:{name:"/m/071p9",id:35,displayName:"skis"},36:{name:"/m/06__v",id:36,displayName:"snowboard"},37:{name:"/m/018xm",id:37,displayName:"sports ball"},38:{name:"/m/02zt3",id:38,displayName:"kite"},39:{name:"/m/03g8mr",id:39,displayName:"baseball bat"},40:{name:"/m/03grzl",id:40,displayName:"baseball glove"},41:{name:"/m/06_fw",id:41,displayName:"skateboard"},42:{name:"/m/019w40",id:42,displayName:"surfboard"},43:{name:"/m/0dv9c",id:43,displayName:"tennis racket"},44:{name:"/m/04dr76w",id:44,displayName:"bottle"},46:{name:"/m/09tvcd",id:46,displayName:"wine glass"},47:{name:"/m/08gqpm",id:47,displayName:"cup"},48:{name:"/m/0dt3t",id:48,displayName:"fork"},49:{name:"/m/04ctx",id:49,displayName:"knife"},50:{name:"/m/0cmx8",id:50,displayName:"spoon"},51:{name:"/m/04kkgm",id:51,displayName:"bowl"},52:{name:"/m/09qck",id:52,displayName:"banana"},53:{name:"/m/014j1m",id:53,displayName:"apple"},54:{name:"/m/0l515",id:54,displayName:"sandwich"},55:{name:"/m/0cyhj_",id:55,displayName:"orange"},56:{name:"/m/0hkxq",id:56,displayName:"broccoli"},57:{name:"/m/0fj52s",id:57,displayName:"carrot"},58:{name:"/m/01b9xk",id:58,displayName:"hot dog"},59:{name:"/m/0663v",id:59,displayName:"pizza"},60:{name:"/m/0jy4k",id:60,displayName:"donut"},61:{name:"/m/0fszt",id:61,displayName:"cake"},62:{name:"/m/01mzpv",id:62,displayName:"chair"},63:{name:"/m/02crq1",id:63,displayName:"couch"},64:{name:"/m/03fp41",id:64,displayName:"potted plant"},65:{name:"/m/03ssj5",id:65,displayName:"bed"},67:{name:"/m/04bcr3",id:67,displayName:"dining table"},70:{name:"/m/09g1w",id:70,displayName:"toilet"},72:{name:"/m/07c52",id:72,displayName:"tv"},73:{name:"/m/01c648",id:73,displayName:"laptop"},74:{name:"/m/020lf",id:74,displayName:"mouse"},75:{name:"/m/0qjjc",id:75,displayName:"remote"},76:{name:"/m/01m2v",id:76,displayName:"keyboard"},77:{name:"/m/050k8",id:77,displayName:"cell phone"},78:{name:"/m/0fx9l",id:78,displayName:"microwave"},79:{name:"/m/029bxz",id:79,displayName:"oven"},80:{name:"/m/01k6s3",id:80,displayName:"toaster"},81:{name:"/m/0130jx",id:81,displayName:"sink"},82:{name:"/m/040b_t",id:82,displayName:"refrigerator"},84:{name:"/m/0bt_c3",id:84,displayName:"book"},85:{name:"/m/01x3z",id:85,displayName:"clock"},86:{name:"/m/02s195",id:86,displayName:"vase"},87:{name:"/m/01lsmm",id:87,displayName:"scissors"},88:{name:"/m/0kmg4",id:88,displayName:"teddy bear"},89:{name:"/m/03wvsk",id:89,displayName:"hair drier"},90:{name:"/m/012xff",id:90,displayName:"toothbrush"}};class d{constructor(e,a){this.modelPath=a||`https://storage.googleapis.com/tfjs-models/savedmodel/${this.getPrefix(e)}/model.json`}getPrefix(e){return"lite_mobilenet_v2"===e?`ssd${e}`:`ssd_${e}`}async load(){this.model=await a.loadGraphModel(this.modelPath);const e=m.zeros([1,300,300,3],"int32"),i=await this.model.executeAsync(e);await Promise.all(i.map((e=>e.data()))),i.map((e=>e.dispose())),e.dispose()}async infer(e,a,i){const d=m.tidy((()=>(e instanceof m.Tensor||(e=m.browser.fromPixels(e)),m.expandDims(e)))),s=d.shape[1],n=d.shape[2],l=await this.model.executeAsync(d),t=l[0].dataSync(),o=l[1].dataSync();d.dispose(),m.dispose(l);const[p,r]=this.calculateMaxScores(t,l[0].shape[1],l[0].shape[2]),c=m.getBackend();"webgl"===m.getBackend()&&m.setBackend("cpu");const y=m.tidy((()=>{const e=m.tensor2d(o,[l[1].shape[1],l[1].shape[3]]);return m.image.nonMaxSuppression(e,p,a,i,i)})),N=y.dataSync();return y.dispose(),c!==m.getBackend()&&m.setBackend(c),this.buildDetectedObjects(n,s,o,p,N,r)}buildDetectedObjects(e,a,m,d,s,n){const l=s.length,t=[];for(let o=0;o<l;o++){const l=[];for(let e=0;e<4;e++)l[e]=m[4*s[o]+e];const p=l[0]*a,r=l[1]*e,c=l[2]*a,y=l[3]*e;l[0]=r,l[1]=p,l[2]=y-r,l[3]=c-p,t.push({bbox:l,class:i[n[s[o]]+1].displayName,score:d[s[o]]})}return t}calculateMaxScores(e,a,m){const i=[],d=[];for(let s=0;s<a;s++){let a=Number.MIN_VALUE,n=-1;for(let i=0;i<m;i++)e[s*m+i]>a&&(a=e[s*m+i],n=i);i[s]=a,d[s]=n}return[i,d]}async detect(e,a=20,m=.5){return this.infer(e,a,m)}dispose(){null!=this.model&&this.model.dispose()}}e.ObjectDetection=d,e.load=async function(e={}){if(null==m)throw new Error("Cannot find TensorFlow.js. If you are using a <script> tag, please also include @tensorflow/tfjs on the page before using this model.");const a=e.base||"lite_mobilenet_v2",i=e.modelUrl;if(-1===["mobilenet_v1","mobilenet_v2","lite_mobilenet_v2"].indexOf(a))throw new Error(`ObjectDetection constructed with invalid base model ${a}. Valid names are \'mobilenet_v1\', \'mobilenet_v2\' and \'lite_mobilenet_v2\'.`);const s=new d(a,i);return await s.load(),s},e.version="2.2.3",Object.defineProperty(e,"__esModule",{value:!0})}));',
namespace: '',
suggestion: ''
},
notes: [
{
location: null,
text: 'You can mark the path "@tensorflow/tfjs-converter" as external to exclude it from the bundle, which will remove this error. You can also surround this "require" call with a try/catch block to handle this failure at run-time instead of bundle-time.'
}
],
pluginName: '',
text: 'Could not resolve "@tensorflow/tfjs-converter"'
},
{
detail: undefined,
id: '',
location: {
column: 124,
file: 'node_modules/@tensorflow-models/coco-ssd/dist/coco-ssd.es2017.esm.min.js',
length: 23,
line: 17,
lineText: '!function(e,a){"object"==typeof exports&&"undefined"!=typeof module?a(exports,require("@tensorflow/tfjs-converter"),require("@tensorflow/tfjs-core")):"function"==typeof define&&define.amd?define(["exports","@tensorflow/tfjs-converter","@tensorflow/tfjs-core"],a):a((e=e||self).cocoSsd=e.cocoSsd||{},e.tf,e.tf)}(this,(function(e,a,m){"use strict";const i={1:{name:"/m/01g317",id:1,displayName:"person"},2:{name:"/m/0199g",id:2,displayName:"bicycle"},3:{name:"/m/0k4j",id:3,displayName:"car"},4:{name:"/m/04_sv",id:4,displayName:"motorcycle"},5:{name:"/m/05czz6l",id:5,displayName:"airplane"},6:{name:"/m/01bjv",id:6,displayName:"bus"},7:{name:"/m/07jdr",id:7,displayName:"train"},8:{name:"/m/07r04",id:8,displayName:"truck"},9:{name:"/m/019jd",id:9,displayName:"boat"},10:{name:"/m/015qff",id:10,displayName:"traffic light"},11:{name:"/m/01pns0",id:11,displayName:"fire hydrant"},13:{name:"/m/02pv19",id:13,displayName:"stop sign"},14:{name:"/m/015qbp",id:14,displayName:"parking meter"},15:{name:"/m/0cvnqh",id:15,displayName:"bench"},16:{name:"/m/015p6",id:16,displayName:"bird"},17:{name:"/m/01yrx",id:17,displayName:"cat"},18:{name:"/m/0bt9lr",id:18,displayName:"dog"},19:{name:"/m/03k3r",id:19,displayName:"horse"},20:{name:"/m/07bgp",id:20,displayName:"sheep"},21:{name:"/m/01xq0k1",id:21,displayName:"cow"},22:{name:"/m/0bwd_0j",id:22,displayName:"elephant"},23:{name:"/m/01dws",id:23,displayName:"bear"},24:{name:"/m/0898b",id:24,displayName:"zebra"},25:{name:"/m/03bk1",id:25,displayName:"giraffe"},27:{name:"/m/01940j",id:27,displayName:"backpack"},28:{name:"/m/0hnnb",id:28,displayName:"umbrella"},31:{name:"/m/080hkjn",id:31,displayName:"handbag"},32:{name:"/m/01rkbr",id:32,displayName:"tie"},33:{name:"/m/01s55n",id:33,displayName:"suitcase"},34:{name:"/m/02wmf",id:34,displayName:"frisbee"},35:{name:"/m/071p9",id:35,displayName:"skis"},36:{name:"/m/06__v",id:36,displayName:"snowboard"},37:{name:"/m/018xm",id:37,displayName:"sports ball"},38:{name:"/m/02zt3",id:38,displayName:"kite"},39:{name:"/m/03g8mr",id:39,displayName:"baseball bat"},40:{name:"/m/03grzl",id:40,displayName:"baseball glove"},41:{name:"/m/06_fw",id:41,displayName:"skateboard"},42:{name:"/m/019w40",id:42,displayName:"surfboard"},43:{name:"/m/0dv9c",id:43,displayName:"tennis racket"},44:{name:"/m/04dr76w",id:44,displayName:"bottle"},46:{name:"/m/09tvcd",id:46,displayName:"wine glass"},47:{name:"/m/08gqpm",id:47,displayName:"cup"},48:{name:"/m/0dt3t",id:48,displayName:"fork"},49:{name:"/m/04ctx",id:49,displayName:"knife"},50:{name:"/m/0cmx8",id:50,displayName:"spoon"},51:{name:"/m/04kkgm",id:51,displayName:"bowl"},52:{name:"/m/09qck",id:52,displayName:"banana"},53:{name:"/m/014j1m",id:53,displayName:"apple"},54:{name:"/m/0l515",id:54,displayName:"sandwich"},55:{name:"/m/0cyhj_",id:55,displayName:"orange"},56:{name:"/m/0hkxq",id:56,displayName:"broccoli"},57:{name:"/m/0fj52s",id:57,displayName:"carrot"},58:{name:"/m/01b9xk",id:58,displayName:"hot dog"},59:{name:"/m/0663v",id:59,displayName:"pizza"},60:{name:"/m/0jy4k",id:60,displayName:"donut"},61:{name:"/m/0fszt",id:61,displayName:"cake"},62:{name:"/m/01mzpv",id:62,displayName:"chair"},63:{name:"/m/02crq1",id:63,displayName:"couch"},64:{name:"/m/03fp41",id:64,displayName:"potted plant"},65:{name:"/m/03ssj5",id:65,displayName:"bed"},67:{name:"/m/04bcr3",id:67,displayName:"dining table"},70:{name:"/m/09g1w",id:70,displayName:"toilet"},72:{name:"/m/07c52",id:72,displayName:"tv"},73:{name:"/m/01c648",id:73,displayName:"laptop"},74:{name:"/m/020lf",id:74,displayName:"mouse"},75:{name:"/m/0qjjc",id:75,displayName:"remote"},76:{name:"/m/01m2v",id:76,displayName:"keyboard"},77:{name:"/m/050k8",id:77,displayName:"cell phone"},78:{name:"/m/0fx9l",id:78,displayName:"microwave"},79:{name:"/m/029bxz",id:79,displayName:"oven"},80:{name:"/m/01k6s3",id:80,displayName:"toaster"},81:{name:"/m/0130jx",id:81,displayName:"sink"},82:{name:"/m/040b_t",id:82,displayName:"refrigerator"},84:{name:"/m/0bt_c3",id:84,displayName:"book"},85:{name:"/m/01x3z",id:85,displayName:"clock"},86:{name:"/m/02s195",id:86,displayName:"vase"},87:{name:"/m/01lsmm",id:87,displayName:"scissors"},88:{name:"/m/0kmg4",id:88,displayName:"teddy bear"},89:{name:"/m/03wvsk",id:89,displayName:"hair drier"},90:{name:"/m/012xff",id:90,displayName:"toothbrush"}};class d{constructor(e,a){this.modelPath=a||`https://storage.googleapis.com/tfjs-models/savedmodel/${this.getPrefix(e)}/model.json`}getPrefix(e){return"lite_mobilenet_v2"===e?`ssd${e}`:`ssd_${e}`}async load(){this.model=await a.loadGraphModel(this.modelPath);const e=m.zeros([1,300,300,3],"int32"),i=await this.model.executeAsync(e);await Promise.all(i.map((e=>e.data()))),i.map((e=>e.dispose())),e.dispose()}async infer(e,a,i){const d=m.tidy((()=>(e instanceof m.Tensor||(e=m.browser.fromPixels(e)),m.expandDims(e)))),s=d.shape[1],n=d.shape[2],l=await this.model.executeAsync(d),t=l[0].dataSync(),o=l[1].dataSync();d.dispose(),m.dispose(l);const[p,r]=this.calculateMaxScores(t,l[0].shape[1],l[0].shape[2]),c=m.getBackend();"webgl"===m.getBackend()&&m.setBackend("cpu");const y=m.tidy((()=>{const e=m.tensor2d(o,[l[1].shape[1],l[1].shape[3]]);return m.image.nonMaxSuppression(e,p,a,i,i)})),N=y.dataSync();return y.dispose(),c!==m.getBackend()&&m.setBackend(c),this.buildDetectedObjects(n,s,o,p,N,r)}buildDetectedObjects(e,a,m,d,s,n){const l=s.length,t=[];for(let o=0;o<l;o++){const l=[];for(let e=0;e<4;e++)l[e]=m[4*s[o]+e];const p=l[0]*a,r=l[1]*e,c=l[2]*a,y=l[3]*e;l[0]=r,l[1]=p,l[2]=y-r,l[3]=c-p,t.push({bbox:l,class:i[n[s[o]]+1].displayName,score:d[s[o]]})}return t}calculateMaxScores(e,a,m){const i=[],d=[];for(let s=0;s<a;s++){let a=Number.MIN_VALUE,n=-1;for(let i=0;i<m;i++)e[s*m+i]>a&&(a=e[s*m+i],n=i);i[s]=a,d[s]=n}return[i,d]}async detect(e,a=20,m=.5){return this.infer(e,a,m)}dispose(){null!=this.model&&this.model.dispose()}}e.ObjectDetection=d,e.load=async function(e={}){if(null==m)throw new Error("Cannot find TensorFlow.js. If you are using a <script> tag, please also include @tensorflow/tfjs on the page before using this model.");const a=e.base||"lite_mobilenet_v2",i=e.modelUrl;if(-1===["mobilenet_v1","mobilenet_v2","lite_mobilenet_v2"].indexOf(a))throw new Error(`ObjectDetection constructed with invalid base model ${a}. Valid names are \'mobilenet_v1\', \'mobilenet_v2\' and \'lite_mobilenet_v2\'.`);const s=new d(a,i);return await s.load(),s},e.version="2.2.3",Object.defineProperty(e,"__esModule",{value:!0})}));',
namespace: '',
suggestion: ''
},
notes: [
{
location: null,
text: 'You can mark the path "@tensorflow/tfjs-core" as external to exclude it from the bundle, which will remove this error. You can also surround this "require" call with a try/catch block to handle this failure at run-time instead of bundle-time.'
}
],
pluginName: '',
text: 'Could not resolve "@tensorflow/tfjs-core"'
}
],
warnings: []
}
Node.js v18.19.1
The reason why the name
variable shows in the video @ 3.24 that it cannot be redeclared is because name
is a protected global DOM type.
If you wanted to add a note as to why that happens. 🙂
https://stackoverflow.com/a/46233014/8294418
By using export {};
it makes it a module and it removes the error.
The starter file for tuples.ts
is missing in the playground
folder.
They playground
folder contains a finished satisfies.ts
file.
https://github.com/wesbos/Tasty-TypeScript/blob/main/playground/satisfies.ts#L16
This should just be the starter code that is shown in the video.
In the course video there is an error shown about awaiting in a CommonJS file not being possible, but even after I add the export {};
to my code it still shows for me.
It's weird, I dunno if the TypeScript config I have from the repo is different from the one that you used in the recording?
{
"include": [
"./**/*"
],
"compilerOptions": {
"strict": true,
"lib": [
"ESNext",
"DOM",
"DOM.Iterable"
],
"skipLibCheck": true,
"esModuleInterop": true,
"module": "nodenext",
"target": "esnext"
}
}
The current file is a CommonJS module and cannot use 'await' at the top level.ts(1309)
The reduce.ts
starter file is missing from the playground
folder.
Also the solution version that is provided playground-finished
is the starter file (130 lines) and not the solution file (183 lines).
https://github.com/wesbos/Tasty-TypeScript/blob/main/playground-finished/reduce.ts
The real solution file is missing.
The starter exercises
for focus-machine
contains 2 folders similarly named folders. One is named focus-machine
and contains the solution code and the other is called focus-machine-start
and contains the starter files.
I'm assuming that the focus-machine
one should be removed as it's a duplicate of the solution that is in the finished-exercises
folder.
There is also an issue with the finished-exercises
folder for focus-machine
.
The delegate.ts
file and the dom.ts
file are mixed around and in the wrong folders. delegate.ts
should be in the root of the exercise and dom.ts
should be in the utils
folder.
The edit in the video became too zoomed in @ 4.18 timestamp and it continues all the way to @ 7.23
It's really zoomed in during that time period. 😄
The starter file function-overloading.ts
is missing from the playground
folder.
There is a typo in the start of the video where you write a comma after Date
and then it autocorrects itself to a semi-colon.
That will trip people up if they don't notice it changing and they will want to know how it was automatically changed in the course video. 🙂
Ready to have the videos reviewed. Ill set you up with access in your account.
I am looking for feedback on each video. Please create an issue for each video in this repo. If one is already created, please just comment on that issue.
On top of that, the course in general, if you have feedback on videos or examples you wish were added. Or part of TypeScript you have questions about. Let me hear it. These videos and order are no final. Topics that will be added yet:
The starter file typing-functions-START.ts
is missing from the playground
folder.
@ 2.25 in the video you create a button and then optional chaining is automatically added to the button code button?.addEventListener.
I can think that it would cause questions if people don't notice it or if you don't add a note on how that happened.🙂
The starter file for discriminating-union.ts
is missing in the playground
folder.
The html file is linking the wrong ts
file in the index.html
in the hotdog-start
folder. It should be hotdog.ts
and not hotdog-coco.ts
.
https://github.com/wesbos/Tasty-TypeScript/blob/main/exercises/hotdog-start/index.html#L9
The starter package.json
file is also missing a main
export. Vite was crashing with this error until I added "main": "./hotdog.ts"
to the `package.json file.
There is also a duplicate solution for the hotdog
project is in exercises
instead of finished-exercises
.
https://github.com/wesbos/Tasty-TypeScript/tree/main/exercises/hotdog
The actual solution for the hotdog
in the finished-exercises
folder also seems to include an extra vite 5
package in the package.json
file that I don't think should be there 🙂
https://github.com/wesbos/Tasty-TypeScript/blob/main/finished-exercises/hotdog/package.json#L16
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.