基础知识

JavaScript 中的每个值都有一组行为,您可以通过运行不同的操作来观察这些行为。这听起来很抽象,但作为一个简单的例子,考虑我们可能在名为 message 的变量上运行的一些操作。

// Accessing the property 'toLowerCase'
// on 'message' and then calling it
message.toLowerCase();

// Calling 'message'
message();

如果我们将其分解,第一行可运行的代码会访问一个名为 toLowerCase 的属性,然后调用它。第二个尝试直接调用 message

但是假设我们不知道 message 的值——这很常见——我们不能可靠地说明尝试运行这些代码会得到什么结果。每个操作的行为完全取决于我们最初拥有的价值。

  • message 可以调用吗?
  • 它上面是否有一个名为 toLowerCase 的属性?
  • 如果是这样,toLowerCase 甚至可以调用吗?
  • 如果这两个值都是可调用的,它们会返回什么?

这些问题的答案通常是我们在编写 JavaScript 时牢记在心的事情,我们必须希望我们得到了正确的所有细节。

2wZyvsn9O6Jfc73JTHMMOPsFGjWTjjI941epoFh+QHQnRwR58mDM3P0nSQDQeju+z/v4pEQq37TXIsmdLx2Vow==

const message = "Hello World!";

CD2N7Zay4+OEsaUxNUguMTq5ca4oDeDdRtrxMbZDj3PjNl6XYjiaj2G4ldHEo0+Gs2q0vT9ER8nxxvB6U2FRBjYTtrhk0N2lzDKTcNJ75MRrmU3O4ed/fNxCMgcD4j5oxxx1JvObJo7HIDZgnEqqbFfZg79kgJUXIsjGgPW28KYiCMJL3AomuRf3GyxZEma+

E+35tYZ2yd2GUvRKgap/czHsnVlETZkGjyPzfwLRZjL6vBLGfWYUouGDpjDnL46seAZClVdnmIdSTeuVltbl1Kpuox9cZj2vMVQh1yK4bDhkOchX3x2voyWqoxHtQioC

TypeError: message is not a function

9brT3vJEpNEAHSGl82dNLlK3mblkCyXDc00sjE/ajaljfKNkvMFyYxU00BUTzLNClaMJfWuKFywvYcF/M0/9MA==

H9vsJspwKLub5m6Uj1ui9xYvmMIBvN5gir2IW//YY1uSf6YwN2oM6ZKbk1D6kcADjJ/1iLrhxnNK/d7NOcaEE+t+G8PiWNBE1d5PWFnJt3JQNeH7V9OnJWXPKjsz4kWM6k36TGUYoNQwfZMsXoUswG7CnAuX0GmhrhCCvmen+zw1A4Kme7hJKWlWsyWTr7pcEbz3Z3vGhGTxVsZFoiqgpUGeyLkrgji/qv8vvwg1oLvxq3LW01GPYJ1gGulrTjc2W7JYuP4zvUJd9iAdT4p0n9cKfLUBFunKl8+BjZzfvHzQ/EBAug8NF5Ip8SfJHdaIJgpQ7uOPOLYNsPp76ikrwIFTqv45nkqCRH61ybuT7m3YcOkDLUlcvDzB4jmPfRi5S0HPn40WSuj48KjF7QXVUg==

aHrROPn9R4+1+Kd8eHdIv0Vz3qul/JmNVE0vRUFTNWz9CyXCW7wBEp0CtEFLN/NBxWxt84Dpdw7Ry1YGKnltsxEHYwM1e/rgNu8oEiz+zsI/w55bxRMl6WkI4bxUY8Fvbfr3Aoop0kv1u0xRud6FLCmZ0B+vZXFs/usdjcSZ6HTCzR2geNsGIao5tZ9x9HHERZ13Zuwb4kkP+BkA1JB7ZeESvJ0eOjtXKiLycmxxFXRBSfWVBZFwo61tu1X4UGSps+/zdggXE7pVsF7l4V1gHl1/D26bpLMXBybkMDwt7v3QqNjYonTXaXlOfnDcCktjnRa6Sf2jPidCc/CbejqHsZ7qRKgnish3qufQH9NYaKR3TBA3quCfBtzOn7I54MolwtOQSFHbK1Mkq5S0A1ZBKg==

function fn(x) {
  return x.flip();
}

+/N+p609F3IOCW+dqUW/+C72pNEGw5nRjBva/JSSEttDqPqUxOIpJWWD6KFERttLYeUUpAJXvD8XDEmYJU4P1von4AFiAEcbbEmE2lNVK/BpGnoBTB2YSyqBKlZR93xOSIC16FcQbmszwXIYQWPoZ0eBTtBOZJu9dxzBwW/xxdzdWTxobC3R8akwwU+1q98Hnevdit7na5vSUONdK3rjeGqtJqDdHgku3XtMA4hg2TJyu978+uXXN2jEFNeImBtgm7xuMyIsaEmRR+aov6K2v8J8tSPwUKTNC9zoruE5VScTICSCWCVDtFufFDN+KSZSX7SApP/vjHebEcPvmNSPzYr4fayn3NWzP8271/4Vp3RQkjAwcCxu1nfoXQB9U42igeI28PMwTvQAGW40d7O/4/ROumQpGaUJQ9njs2GW13hV8SWXNxk+sGp4koa3nm4bITMpVvse97g31thKEBy8rwTZOznUd0kUivIZuugq5RwA9gLw3b4lpW8gN30Q5EHNqyavjE6pwfv12OQtd9yz8WMGGU/vEf3iSIfcP6K2JWzkHnZiNnDD3D6m/w/LmSvjSglhgyjkgcsZAWKUQHTSCCap//l5U5nWnY3vvAVfEcILCIs2ybdJC2YIEEV4FomwZr+oBAKcP514/yqaKPyJWw==

XwjgpFpJpJLo+x7rBHZ5dvuUg2oydqIQo3XsE1p9cU6eEokB1Y1VOAOW7H+0pRf+PY81IXaCvZW8IfcYH/AIvt4qa4jqi5raZnroykG/9o2JfqsNEsMfqK9RI9RQpbBcjPAYip67A9jVM7GmNGtBwz97DKvD76f54fJUhVQmQe3SJlaJk90fKqMtRSLt2okqWlq2zIUsXjkzaYcITshWCpS9kuNLpgR2vLB4M2KZOiQqykmKp7/1fbsA544505JE

EjuXfse/QUPpij57fDLwHNqqqmbWPpY+KcEwgUUIIzfaGhaiqJeM1gqWSLMcMMzhTGjQmaeLbC/WJ9Q/i85DiUqskha7MMHjRvO4/sTXIulOiOnv59RfvAw3cpb041w4

静态类型检查

rzmy0kacu+2PMrDb7ABF4+Kh+CrAv+nTXeTAU77ubnp8Vk5zVFTkkikjPodxIhwkaUQvo/vRob2DmN+GkW6pYpks8XHMho2TbB5FPorx25vYhVWaeM6xEh/+AUC/sSmPwaZpaPI5eETQkATPWEoPojyXAXisW0xOBjh95PbG24M1/YIPuU4AEbeP6VVwWQpwQIt0Utjb7pEZmiWf+ctxaKj9v1u431vsmb3mAXrm9OyEQkxkU3gEhwQEWqDYStydGccdRGassKIPyRCKG709Xl9k3GHQAjKcfB8HRp30x9vseIQtJ33XWFSfEJTPv8mfK6A7klaT7eb68UAk5lpdqPASHEyjAHUhF2xBS8NpDHiKIzqU2qkSi3217M5u5TNu2aH1ZA4iaoXmT+4JLi8d3w==

KDkSmU25RX6CZ7vPqclhddOqndox20QhdPx2S62Q3X96+Ww14zq3u7drAP9ObxKBr8KOuYkEEkI/zTMnG2NI4gGG8nI2Mv0M3sLVTK0hKg4ZvpCu7N6/mr3dubiHbS8wKxAWz+5PbRSwgEVdeD2f4FoR6xXxgqN2glosY10oiSmtvA/OX30BTg8CaKl9mLXki6ErnRHKV8Zr+8msLzR9bhGsgoR/v9yU4poTiZDp8KM5qyViFaQaAwETF2O7tIRxvOLOAawzMAFEQ+Od3WM426DI7mtSgSmzAPMl7Kn3IfJpyKBJby9SIX+QyolsLoz2eTuOpORdzX16bvt3IF90HcPNqz/BW8h4kaz8hI0zs5RYYAqKr01d8ebLnIEW0TisL0qUdgaw6xux+S7XfppP34+nYb8+1gvRRpPMbvlpMEpfA6GLhGup04Gy5OqAT8vKycrWPdV8BAo761vxm/dLM6ZO6Fqz5pnTX5OgyfC0VQBwFQdtBnkUC+gpGnOlW9LJjmrlrTnMuQFKTd4nBHJh9JCCmkFfaEjdKm2dvSmbcoklqTFUg1/k2eE2N484kOK9TJ3m4Da8fkPPJuazngJ55T/rdjSfdxq/rI92AJ2neYs=

ZPx7Dqx3O+6x2Bx0Kix9XLIsq8hTGQrptoIfLjl2hkOtWb9VQ5AsdDV3BzbwzM2fEvKLFOdEQewmUVn6CegDX5c6p7nRf+oTsS66PR45XB5PU7AHfYs95Fz9pwJ5D5Q9om5RypiYz0I1ZQokEOsM9GPzMya2aJdRL5gAjelLcTt6m1QDddgtzNJM0cO9WC3vmYY2sLl8V1Px/KbfMAwwjnceGtv3vbSmg2cfNrM/hHGWH9KygUsGsQB6yfz7oEmAE61RrkDExum1sMmBOdqW6OwebcKZAoiRCAHL0grZ0M0NUzFtGPmGVZtnfNq3t1Bck8zaMdzuS9ewXuanzTFmCN6bY4kViNZ2hsSSRBm3m3BjPclg9nGLDZzqQ4APg/Ue7Y1RlmpJZxObe4px9kRH4r3seWyqOL6RufplIHSHjLU+TBPrR/q9tdoM9RMR9hR8gehNXchaPz2TtfAlbrMJqYvyShXieMWb49uGbceFtY0=

const message = "hello!";

message();

8puY2XAVmf8LbBf4KuiMalCDfHlw3UWdeRD9h4P0iy55fahlMiORETtjaVR2PYaBjiDQF+qqVMuXAEFBqgGJ9rrOzmYyHx6GDf8Op0qrWkLASSvAAbtzWrHm+gizp1z56HB0B0zlVzb9XmQrX9lvqQ==

非异常故障

x9fVWKkmqEOcbMKU/3Ce7baec9iWXNkbQDqIgK9QZ63X018st19J3dPoPx2HIgjDeGs7Em8ZTpr8usYgNZQndNBKxMZZ12UheGFOnc/BdGX80NqDLmT3s8mNxKJHlE/04SnPGHGK/zbZmWfHmNc2nmF2dLokaDjnFh41B717qTdUXeSdflqjW1u7H8EfnlcI3oD1jZLKkbbWz8nM9Cr+G/K8N0NYWF4rSupAgZffzLQpVvcqvwbU2KzQlnI096bmDl87vWUAiHwJldEzyr7fa4kkLi/510oqCKOVOeWrul4wVs9o2yNqy5MgfG0NgBqaFja9g/ODmVxrbed1OYhTAoO+YuExgWVf5eubFaHOFGtJ/7KZ56DMSwgJNAUp2jr6lwI8GY+/rZAYt5fOe+ZMxw9fxYL+zut3weNpASx1ZWU=

AZ3h1x3C+K8mC/WuSdtZdhXfgHuN4cbAI37FhuBMRqD8G9tL3z2oQxo9M1+Fw+3yjdTHEpZAsuEGko67tOmO5lFMoEKAASipeKOd02R2usb2wsyP7R7m5x+VsBcUYAZu08NntdM5z+05nY6eRLKGAFaYKa2+AYFiV2PClR3+53BeMhQn00IB0K5IrS5Oz5p+5/oQb0VjLdDO2P50hOiLuOj/0QBL6xM1U1Sy+VHHny6pwdUs+jk3IbFKN/TYff145/7phPp/ghdN7AFXoUXZuZjxKBAeu6wCKWqeNhnWLvar3uWaZWLcLw+JHSzTMueWn9pq2WZCDtXMal9+hULlTeYeJI8l+OoC4+G5mTBazM5y55zu/9w+b920Il67+75p

const user = {
  name: "Daniel",
  age: 26,
};

user.location; // returns undefined

bqJsNLrmIxkGr8gM6NxkbdyzuMWi8oMednvvt59Fu9QrXn4Hmo0xtY9WLxF1ghz6N9jgfB3ObL03ON1oHb8Mt8DN7UOFYnTRRWmkcB4/PYWqQtEPql06j31VzoECzzLp3DG4163gRArxML+RGXu4s+KrmXBTXLM5pxnjNmshPk2D2fxsZTpPCC/tw1aC6DFSuNOGdBWnYrz7YjQ8eQHziY0ta+sH9V7mvl8rmOJ5+I6wq9wCJ9pYw0+G6IP/OckxOrDQV8NbX9quyN+0G5lcN39i2Tn/F0MBaum/j3+aVK6ER+TZkroBRqIrxioD9+eM

const user = {
  name: "Daniel",
  age: 26,
};

user.location;

zX4kidXu6/QGS9JlhDsUXpG15mWZW8euzKi+OrN8bmSxJ9W39Yf9ReLWKEfvlaXv3QtsIVjFBbcyM/vBhdfTjxUOSZ4oponJUBBUcz3XinRJi08g841ewkQdL4d8Xu/6BQzUJBYeoJra2haJwuFWDRjxB8XDFqF1HA5I1sJda9mI81rynFQyeMK685zPZM04ci4P9VNgi+mHW0+TlwImY+ERHMsH1KoI6tHNIgBbqxU=

RmVRELN2CmxWB3rQvueGLxyi6WDWdGljvcMRxzdaCC0=

const announcement = "Hello World!";

// How quickly can you spot the typos?
announcement.toLocaleLowercase();
announcement.toLocalLowerCase();

// We probably meant to write this...
announcement.toLocaleLowerCase();

Bql1Aq4Qve3OBpHiKnKgCRGHwHZzOO8eTNFpkNBfFv4=

function flipCoin() {
  // Meant to be Math.random()
  return Math.random < 0.5;
}

mfNVGra96lVMRgEl8qBUmkiunNiHSqlksb23fjVBHg4=

const value = Math.random() < 0.5 ? "a" : "b";
if (value !== "a") {
  // ...
} else if (value === "b") {
  // Oops, unreachable
}

工具类型

ctTJqLCNK3hpL8JETUArfS7SO1+vTfhePiMgKzjnU4jR3pgHNAKnyZC6mPAF1SHJus+kh0QXQeTrcJpZPvDmmlBvhb6VkJ94KgiJYeCSsQMBvpHXcXmZCZGZd0ZgCPIKP7tx8K+vwe+XEnSEzWdQ5o31q+qTtz2lNWRztq4lJzu+S7UVER4UC42XXgiHjncIMGlRQK2nZnvAouG68SHN+A==

q2lNTg1Ept1FcEktkJ9PTAt+TYbRcUE+hq7jHGWy0gAncUyZX+lmsh1MCMAHPqWPdADNthpigdtXge0HX4rcoCUCA3hHBdlLZcN2J1mF4pYVQ4QYvTvGufdV1qfVhwHeZLWTchIA0TF+spudJwhLsWkFQesIBjqjAv9RG89fXCTpspbDo850y6Noon5Kg7T0TudiATaUn0wunRSt70rtU5se26dYKhtg5GmTUOlznUYfFYjBr2+eLKlvjGcN6chYVBbQ4sdviTEjHIaf6DiV6w==

7HyjJYRON/0WY+5Rs8ar6LqihAkI9vXKW4Yz+Rh0bwVdmY2S8JoNFAKzdqE+D1G2GPgl0+2W52j1kH8LaS+IOAPMFxvGPRBOYiIv7ysCePadaLHfxjAreSIPDJwDYrna8uC6IbLSnLTEIlKYkS9iSDSvfuXy4xudgvK3u76ysokIk9geEq/KpCCGmTQ9vbzrKCuuFvyyil+bqf0eA2siM6VpMYOoYlyU+J18KZKHcmy+zTXSXmHWcWYxwHsKom2tUdYeZHdo2+L1dfk0N3+30Air2lK5VFQjQEqkAR1ZYks=

import express from "express";
const app = express();

app.get("/", function (req, res) {
  res.sen
//       ^|
});

app.listen(3000);

4ZbD0xolhwLHy6zULAeo3qERG0j+5qURQHEv8joSoNte9KnQlvEqgbF5RiVr44Aqr5UlOv6pmkIDehns9LVyiJJgwfO0/cD2GT7Iy8aUKnny+OJGpX+TiC3451aRjiwByPZ0kY7WC2IphRKdxvpIGQn8DNsdkb+j41nuxTy8RT6K2Ip1fl8AsdaONM+51tbQL/brfDwEbDRVsDOCVIjF2UiTVqblPbB9YudBgoq1tf+Jfn2k3hOQ0aRNQlem660+/GfCQEVzbrg/8GjtH52tDAij4M6rfj2rc+uxSZTWu3ui99ENa+kCManxKDyT8NaR72ZZiDjXGWUlXApFTxGBstTvZnGJUE37Yr4AOCPIERnp0XBPEvOg/qVbWmW7E7ds2umcdaxa/V0fzBmRZbaZu3lY/hqCSPIWR1KJiF13AROwLtWO8yt4qZBtnsmtIyqhDi9W1UTKPBmCxy4EixMCmJ0fUDwC+eF+SOBrC03fOi2Ut1ij467+tuwuGadf+bdmFcy6O4ibWcVGk2dXzDLf0U4nzQJcANbd0ZNn0lNHbMbWIie3F2EWiXR/Sl8HI1iy88TEhjPDO1kHvyCPM2g1pOX8HXo1Wpgui+OSus8hsQ9gXNfu9xYZrU9AD9z4AWPytl5Puuac8tVnp09Lnk22Xg==

tsc,TypeScript 编译器

wRTiexxRyDD+3EfGXZbTOfccDNx39NUuwtqdlIrXcgkr6QxgMCppFvLtfdxUX3tFMlomMLRDfnyn+GSXxpkmbJaBciFmrR8zaHywN75G5xvQ0B9Tr/hn9TS0VKxuCeMeZpbCyQah8vYNDATOpHX3oIiri9851m6xkgvUFV5d3gcMjpZytLn4jI6/PTlBtzIFvJEi19upZRFIlujeCnKFlLZx5sU3etUx+Rb3Xowp3zxQ/ARPVHNyPjDHFqLQ8/NAKPPmji4BU1o5x/jQlIKp3rxhDyE6bgfs7U/zmaEGyfs=

npm install -g typescript

vCy2b9dD9EdA+xfd67RwnnkSn2K/K4Hvak9HZejv0XW5vQ7ijsuaUhi6w58PpSQHmqIsmbgaT5oQATiSobxMMtc4SThaoLE0p6UHebVJWA90Qnd5r71EZD9MXbImAUkSN+SZosJM6hKHW3LnL5kYqrdunS/V9dWwSBfPkFSbbqjTje8MyjBeT2FfTcUl/FgZ0hrVa5uY8IDJebPTfEtzeyhpFNAPs2el02EBGWAfGS2e1e4e4/1PypQnR88CCgNY

4q0B89r/FbvqDkXVYP93C9Bu/ey9pzt6I2yVX2kcFKlo6e81aflYcXr4CgLa6BnSFSXcu1RZPUMrw1d2Jm2Hjopl6BepflxNlTow36oBDNXVYALuaI9ZleRxa/YZwYIXb8h2lqAu3TuwNkrh2SR9toknqUHcXBQWYAbCJFlPD8g=

// Greets the world.
console.log("Hello world!");

3AvFtw0kcO2aUVtYBj+a7FWbp32r15qic0Rw8uPr+rTPgOzQcYmlHPPrIOGCd9eIQDUg0B9O3cfP1Pal5geoAgRLIZ7tXpn/NbrYXF9BIFgRTe8tRq5B0u7XVGZaJLFa0gChH9zlM2MWw3zhTg3z4yNVcknFSeemJICQ1xEqSQj/FD8nk9LtLvxxDdR6l47NKU2mvP5ESJ7dIvfzMpvNG5ASAAW15r8/RIFuaBmTa8IUcvuJJmIEYAtmdSCF5zK5vDDrddIX4dOewYjemf8pYL4DD4ArxMASGJACNI78We5QTN4Fjf0qC8EJwqRFjDHzj0zpnWM3teWzww0MziGq3w==

tsc hello.ts

xfHhIBvIKkMMytxcDVKEPw==

omi0YYDMF+eDjna7CNfTKJ27S5vWf7zvkpxJ9r+UxapbPohDEX1TzVtI9esTfrJjMmi+EXMn14VMEQJWGKgmN9toKJtleChOLJCOciBDUYU/tOMsA98nSPBswbnJdoaqyAGKiw/kCAw0Ktp96nJemfXCphhKOV4V5NpxcFAM23TTu5k3wUBcguy4k7zLTvG3G7GjLaP0j6BSbh8LEtOIDJoGTDPGsl4rznPmu5495AoRVpCoeyVsLx3Fwk9KmbYcBXe7fPkYwrDpfmzbp/3ISw==

K6n4GH7blOIN4yC0quszPzRRgs6NmvY3EN48BvBYKJKq8ilXnLEMUF/HQKOzkLRe/cW22yiPNwPc5hxv8te8OYzQz4krbiMH6bBQsldTBvccsaIf/jA/ob14l9QdNvDk/jDOGu0IZbuAaWYPGDg8mZswYxV4rz528zTy3QTb5MKSY3pu9UA2h6N+MJn0Gl3Z5SyyRJ16dz097PMRPGcnBZS9TVJautzOCsXWD6KDsvJptlPfMJWxtpu1V4llUtS8S/bKShbRpOi5a+gqImL5Fld8x3mY7poddg8Iv+TOd68EIEzscSDTP7vGYqta2RZfhmuPKt33ZsAewEDeyUpVD5OIdp+kvJxJtO+jPFktCur6sye+HrssQ2fy42YtzzVwGAgli+lHCWl/9/x/Jjd84538U3QusGA7hlxSLDdDf/AFEa82qVOUBaJMP6VNApfB1RXmhn83fI+RTNFBoPHE/OvaOplLJOS/AuqmtR2IgJRXD4Gw/ZLBAWUF0x4+FJ9QnpJau/0JO7FN4+XgU6Q2SA==

// Greets the world.
console.log("Hello world!");

yQeFEkCyRfN7iQcQSldUIrV1rPbqJDJN5MgvlLtkmSGiAWvwdKag7+yL98GmTS7ffZyaGwzu3q5yeW7/Yu//MRFb4wD+Zn7P6PIrnYcrL0R3u4WciOnRF3IC91Y2stKVyQT9BZXFGGvvO4Sgige0lVWShZZGgm8NfNCMDiQfKUOQW9e46wzxvfyTeBFdJxXfJkDrWh239hqGuRahHg4FLVT7JXIPAbZ7QPwfv3K9RtqCXyH9Pjc9Gasow5t4pZzLyjbw12a+fTWzdQ5N2XqRdJOc1LCnsms1VXBBv6tFD0ZUlPg31dQ/7+K6W9kWGdjxaNySQTTp2g7v24x/wu14WcNM3+Qwwd1cKbcMC+JJQ6V22mvQ8CP5v1kM0aAe9wPhyBAvvA2/3psg0GS3JiHwHdU4yHzBcjvTjSRC7B4DO9RX364vlYrQg1qv0SVo9U0J

Bjk1RYePgJoJ2iyBWO9KmlKvpuP39SrecTH+8WR57/OcZ0yBpQ1tKsHQBmdPsHpyaq7a8iZ3FNbGveYlv5/1K8zcDEarySP6eyMSVhySbnoWu/W/3KH13r39UzRrls1g4w9nfmVM2dHB2gwo93z89Q==

// This is an industrial-grade general-purpose greeter function:
function greet(person, date) {
  console.log(`Hello ${person}, today is ${date}!`);
}

greet("Brendan");

x+aXgyIamNVbqJfH8+7/WDtcgGm0e8eY3paT6hKyIoj6GO0rQ3YtnVwyZTKUuYLz0N8cCpAAXt37Bxec98rIvSlYcYsU6ttZt7ls4nrqFCj7pbMHRCvUiXKOZ8AjbvoSuCukcEPTfy8QsFFe/JWbrQ==

Expected 2 arguments, but got 1.

ldmSSHnE6psNYTdEqUGqa4kMUSxHHh4kbXgL44gDxLJh7P1wD95msBKttegR1hDFhVkfSvcOAZUcL5O8KA5biR5xSbzHbE8bHNtKio6r5gGDMH0f3mwUlf1tDeM3X1XQPJGL7AHBBOlEeeH0raudQkDKoB6pI4/GkLAuaoGD3Z7jNmbm5JydwqQWkMMjqvoVz9cpr2SnSj9GhWE0eT6oYUgBURAogJ/T5yjuO+8t2ofm6Yf1LuTbl6DioqRkw2JXIkVeZJzVVFStmvk+AvrqYvuSkPEbiSQLuBsGJVpTQyac6k07LnBxLPAj9Qun2LD+M7VBkRbT7bSPFr1fOT1TSg==

使用错误触发

aWeHSejgZezp9NZCbIQ1dlDPqkTtnd+iDRd1JNNTrWsuIyVN/oh5AiBirE2LrZy999ZhaEwoQhAyp/+g0ChNmbtTiiJiZHpyA3IZkxJ8z9GddFToj1RLjt3PqHOnoQ5zTtO39t+gaE8agA2e/6N9U13Q4JOksbosXtbHOgSPCEjKC7ryM2Pdk1MHICw9pgP7OOikvnTNPq04dIIeSfdUbJ819A3V2hho1qL1u6H2F3Zqn7iB1qmsAfthtu7jhNj1QV+yIzfReu+xBmQcVdf41iB/S6bcPyG9F2yVyVYqc7KsZQMKxv1UjLAvKlLXqqeGVQghcN9tM9MqMTwhJcK6WSMAf54WlmbDc+YjrFqrwbxo9j1ZDXiC7BiK+LDodF7tc05g+PHAn0ieh+jI5o+0spJXgCyGiZtSfcVVf8PyaZ5Y5SYz4R/cmf9x1F2muCbw1AMqi520AYs1kWkuLGl+eVzvE1NEy3o9g5EdCG+a7jJZo1rCwcclOPl6Gtb4TwXfahP48svbxrHbJ9hh5NJIpc8zp316ztA+vcoknLWjRPs=

43VSwdJdLBTFV6ccddXrunMFa/eKHBY/as6u/xBh2aJBzcQshExv75axgREmssGYvFKCINVHJp23/mKLgsKBuCiFOp2x4CEmebgoQcWbMYUpHVBOFBMrokbOpF8vuvW3lOhscZfWzqKp6Gn7/21MP3O0qVdN3/ZBgAeBus3dEFn03kxHaTLiTzElD9B0k/+4KZBiw6HbAepbEscMoqrg7JbrBYNF+AUUtYqrSAEwf7MlHWcF4KPL4mDRYCIN+WHAjOP6KpeDE5FXV8vnpzYm8BmFfWtg+tcDfkdbgup5ymhVO0Vm1KBFvu7WjpIkYDAoB/ZmiGpMINcleHRiqpsS9yYqpl/TH8FF6VwAoJ5sQdkxtdLolk6+SiiHcAle/BvH7MYT2avgbjGpuCLbQZ/MnkELFEwCvAEl/Mx5vULrUTSkWavpSaE4Ib4Zf/7VooWm77WJMYvI9hOzW2SualAh9wFHWCdx7YzS5ejmQno1IIxiI+z0Crfe2Zs/czfuxnAOrsjQ6+6TYuZaNbjMyT136orr88gT0mswXSUaw4xC3v62YuHik+t3XKcehaQywpzULXTbh7B7Ox+V6y9VjxNKgE0IuleeLckCdIR+N8jDj5MeLMh/rw3MzbUQfahmnU3n

mbi3Xh3B3BbeCAppjoX+znF1s3wVRvEf1BmJFYOAXLMAxUJ6wirNENLtoCTWjPxH4SKTYdEAx9K4ieJEUm/0VaNtKUj9xbMCYWlOHgsyAnjxhU478fVtcP58lQZpyz/IK0SMqDgM90Ra18QTxS10T2DGDzvc+lCzHkOFE2/8WU5KpJIe1g7wtvjFYel3CQlnpXvbgISVZ/ZXNF2sdKtWemoyC2FQIJmGgYYqUDR6swmhuDH4P0UskBggZ1W0YaACqj5t2+0yAdmiaomsYkeE0Z9/1nJxVByclGtXdfRp6FDq4mPtBDdE5OfLUqiIVmp0Q9YSFwqj0jlKKC0oQUADgwB38Hz+LMn5PHDTxo1ZMhb9PtifAUEDkO4dZ+7FK1JKJZMWPU3yGsskrZLMvIzdsi1Y01pyGd9U09xqCw6wb2ijkoAhYUerA9LoRHcl6RH7VOs4WFBbHvYE3X+OJCKYqpaJzJM+wchPIA+ytgjmBQhxs6SSBTJeZvs8krMnnNL9

tsc --noEmitOnError hello.ts

dSWTkfUdtnN6IzdIu5JWVj4CGs8Yo4grqcFKQMgvHwD7bDpJXSX8j+E+7cEipAGjtyi6hnQ1izQUunoxiBpcaA==

显式的类型

x9fVWKkmqEOcbMKU/3Ce7ZECu6GLhOMM2zI786YfbSkkMUd24xzxe55U+dOqQWEEzpbdhZZYIIPqtPZ1dmNRxfBHERYR0tG46I7St5ZBzP11qE3UuVnMU+02LCmuzZDb0r4gN0Kn+moLMkXVCVQhIa4uSmEC8NcW9uA9H7r6lKH+5qFtK79szOYeg79rR+gvZFt/0U3W+kJIRCtk7YW5D3QTsZHJnykIzXuSuyKdIutz67DCMHYJ0i43L/KnhafXM5w8PXJPLDayinpgqj+gRhHgnuj05RZEu14gv7QviYLPJAdR+PFu1YpLnVrPQyU+bQwic0m0mP3g8LA0UIK76m5PMDwmMfzscZV4H7HY70pWR5lkbxJHzNi67JKzXMKmgRhymXbw+XltvVLdF9AsUzNkDdkYxuDD2lwfz8JOUHNF/3/oFjGYvEepB4H9cu98/wbZeznG9qhVfMWS3nrEqw==

function greet(person: string, date: Date) {
  console.log(`Hello ${person}, today is ${date.toDateString()}!`);
}

LNw5hhdSLo+IMYQeHmbmtEycBE3s6ni+uIfQ32aTnviDEUd4j6MAk2fT+VJLOL/alRB9jCjQjZvuOVfRvTlev6B6f+XQpxa4efnXTwtMBqzkcE+Of5cg6DaEkDD2WJVAbePHLknYwj2/Rpr7cXTZpOB+micgP/FelSFjiQatobAEPHLXVNTt4Yia/9fhfRp4BnpEAE/dJpqLd17c2PPMY9lah7J9vxGFi6/S8cYMpfauLzKkQAe2KMWLLztyMo6uY/rA7qBvs4fI+zJo3RNhOGoUI5MsxzpKTFSv3MHPL1yeykaxfOd79f1tcQiuD5RlvHMpoFfTRnfTSNDJKfoQvVyw0M488qwT7ErlUztEF8lOJcd8+y3TQLU3QQIAJuQORnEQVHLIZoA69v5Az9cmYM3Vi+KT4fpH0bQEe2gtvk4=

TfcWSmwtSUPCMeNHS59WO6ucRCVJYaifEr8XzumSzKHvpMLRz/1HlTDnuSttxw1sUJOXfIGwNravZ1rbr9HI8Cddjl2rxR0l2m2syYVsTACvwWRxxD47L2z/i1kDd5bRdT3KSpz7+E3740ScJ9QTQE2uTWqdOl5v0en8xKAi3JE=

function greet(person: string, date: Date) {
  console.log(`Hello ${person}, today is ${date.toDateString()}!`);
}

greet("Maddison", Date());

JeTvBADPxEsmgUvT7w/IYPTLornZRoLvXF+veq4XKuY8RdDWyDWYAfONfRTmUuJtCoPn7ip/pSSUnJbCcGmaEhB8TKim8tvu7su3u1Kj1dtINA3l4Z5pbPf1W+ZdBrjB

1uWDArcej4uS8kwI9DYX8Mk0NUj1qLpfkiZGYNYWY0FLtQ8ZsRr9ump3eaQ3qkSm7Iy3yhtDe6Ui8bnZrG6uP7QogH6qReDJpNbUK1oXw10N/OrPm02g9EHfQ/6jzb63/NEcz9cRyw0qjS5Yim4niaCxAk0d6ZAE2ahON1H9QJYz6xX6xZCZeBqh3hNyGoMokALTe7xAHpppZpGa0OPLq1nkIN+7iipQDpaeOwRGgGe9RVxUX0lpspWd2lBydHLJEdKsA7cgLsYzd+6TNOy3+SOKufnRMlSEFRmv9wdr3B4=

+YmsZP4gJA+dDIBV84/FiScrlKIAhmrJ5I8DaHzoHMRNm+UYfi5YZVe0silC+4qlWiJT4swMHh6H2F5jlhUUtQ==

function greet(person: string, date: Date) {
  console.log(`Hello ${person}, today is ${date.toDateString()}!`);
}

greet("Maddison", new Date());

Xdi9bhyDjNE149fqGkN6JB/r3YIDGO40tmrSlBlLprPQ/2/HHiVhD4ukVKMFBEcKh0gnmZ1ewiYZCgY5zuKYrw5Ij2DMY+RNl2O5INeBpFV7xbM2HYwVOpk0v8mDvTDJgFs5RJII9CEOSjKYVtBmMZOY8NehOvEwo25iMm3YaX5dVEYrH4r8OhoHJSdq6y/jAf4DdAIS/3AS89volDH4w5V8FoDfuOycAY7NvlDSpW7nP35YSh42hdzYHEXD63Zh

let msg = "hello there!";

5W8ZkYI5mLGvLuIt9inNJnD2qIX2yNzneQXiLKcWNwf6rePG3r3xdLNExaVj12jqzcImPrmB+H3FMZ5U+C72TJ99agesKeyhP29ZVoH6GRwh94GuOG+th1EhoD/VB8Tfst9y6RRXqndSxI7JBk2MW5K/EifqT759hvQys4ULdqMGDijkdcGXlxfp9IjOaQilmRq4v2vXkadLT+E9N3HY/eGH30v1LUE049ysM6RO08tCagPfXjQatJi8FmrXZ/QfNFrykS+6Qc5tR/PJvHRojGzulNNPRzHQ4sRoxkeZPig=

dkQmb3vvBQ8RL8Rakp6VJ2Wu7J8HRkieDGdpVA2bQMWcSsp/isvcY5hmEzGAs0whdr27DD66rnZBXoqqeyE2uPzXo20jjw7w5d3FsjVNksffM7KGCn/xrQr/cUikdLAK6TXEGStU7rQVJakUfdYVPHrC3nRBehvP+F6y/ukuM3WEXimVEWCFdZYT1gZIx6ZV

擦除的类型

YDHxFYyHYgh4EY0GdiTI/pFez6Fl3oExGjQpYHqIPvqv1EA2JRg0l8/N3ssZFdO6Xb5bIxyQwAJhLnQ+PyIY2lQrDQVUpgEnmx3p328VwrvUfA8Jhk7qCWapElaa4oh3U8CZ6uvNffbB/qHSfQk4r23c8Fdiuq44tXxEQznrLSKf7Wh16/zkS8nMW4HaU3qA

function greet(person: string, date: Date) {
  console.log(`Hello ${person}, today is ${date.toDateString()}!`);
}

greet("Maddison", new Date());

NVA1uOYmAhbsCwrrYful1P1zkPBFL6VpuGpl68CSEds=

  1. 我们的 persondate 参数不再有类型注释。
  2. 我们的 "template string" - 那个使用反引号(` 字符)的字符串 - 被转换为带有连接的纯字符串。

uX/Oqhnf4Q7I9T+a+3i+qa5/CuXAuXpVPXV7HHkZwk4XX8S1Rq72qCNHqpNmbABtIhrLCWvKg19t42Zy2rtAI4IRJy9CWNV5McK57ScqRSnjswLArTU8NcuULc+UudJO2EPtiKT8VQXFoNnoQJMI3PyiKnzCXDG7NmrF0hhFprqrVjJLiPJ6JqH3V4ulzxFutfRUuCiZXM6oXAXHauGMtyvCtlMWq+Whq7SVNXzN+21W0iHRlq/MEFPkYE6JGPIKxJZwQIpoO7HyuKvXgwu5mOG81vgC7AgGNJEc4YE9rIE7eDZNye3oX7mQEP173frV4u7BnVU5qvccxdl7/Wvp0gvOC5e8Gxy6QblMKixdNhiN8rCyqYfF+z+9HS5/KA1HBDz/HJh35QFXdb3jtylL8p7Irub4mbx7excWs1ehDJqKfrjWsU544evz2+SwcyxMQXJY+s6nfewl78Av9TycQn6ogKwUqceuzxrl7FxBcHZWCakpZb0UKkBFnEhqN8O2/RrJsK8uvGjlIG1HSB682WGcnTBR6wvkLIW8HL0IYTCIOvgC3CwC+HqGg+Pz7Tkx2U4z4Hu/Q26LVwlDUuxt//lz759XiNJpQmwZCoGoXCJeLaWcof+Gg0wbsjzj2oErZjD8dh4FFSPwtzPM2CJ5SI3WTVDUcKpkNFn3BF9OQ38Bcv425p0+uGALSX+fCje/mCIzK5vzNpTQy7RFUaTyCw==

xr5XJUk1geb8LEm7B8zep0OxPPz9R9TR5ohktyyJwC5MZBRIgAPykKLvETZSMqTfzzAXS5awkO2IXOlC8n5PMDP6+99RJZFCMC4Pv3JEnTs+W+IKaNOZ9tr3mkVUI5V9

降级

x0Ik3nWF1ZneBgCGTmeXvrN8qVPLjGSDupLjUelb3LkOMycx/8ZWJR49XZf6VihiIxflkpSEsYVjLrRpSt4DbQ==

`Hello ${person}, today is ${date.toDateString()}!`;

ltNT6nid3X9YTnUotNpHgg==

"Hello " + person + ", today is " + date.toDateString() + "!";

eJf9Ah3uR2Cld6bRmxFaoDyT4vAq5MeO+NbiqXOV4sg=

KSN1m6Dl84Gyg+PUnp7owbMHmoYy6ypr5VoYv0rzP0hxVpRCKWP8kbH7hTzcrZSB1pPQqsb8Kg6SpQSPMqet+d+HNwr3jc46yTcKH/tgc213lC/WTWHBUYkSDNDN5ltLw6ffUIynqmZ1KqFanFsJnJ/goidCrSHVv81EijcPKtPmFUmHlI3h7UsHPKwXTLLSn5ffyGLSQkx9v6aIzsfSCIzR9vEijwjPbO5rqY49qQBYRdT/WjHG7gr1VNo+se0clFayxRiD01fkXohVIXzAOa0mks1RqK13hanJa+dx8QhLZ9rksDrH9o+QY7ug5c/aoBuVmePyOuzjuYrXsYVUD4DuiFPfSRQPK2ZGEwiEjwn5k3Vn6l7HBT0sACBZ0/SiRnbMzCCslYA9GUQZlcJMbMbC3szKeQeWuDKJxXsIyO53WRyLrq43OJqp2vtvt6yA6dK6+z3shDdwA6iERweCG13L5CYC44BilWCaOOIc16BAAgrPTpEre88vZZyshAKzG9z6vlSS9Pum2vi60xTgOs7oEeYPs3Y1McuKHVz9pxk=

OVpvkAXGgX/zWtWuT48Sor5JD81sqtLF+6wNsDHXW6u19S2tKeNaMtxIDmu/mlyNl7PzAgMOLsdLyHLFYNH3DD6sYDwZ43VxVX0OXrcqnrj7u63/MbgUC6ySmByuuGOADW/06gVLl05iGqbNPHScJ9ztLYiI9W8bVlPFgzqKbv+m3do+aRiCeduY+A2uxjo96Qf23VkmDbySS+j4f4U91/99LMmduDNomhb/rZPmoHdqZO/TZ5iYu7FnO/3YjG8Fyj7qcf07pGD3ZcKCSZ8MVJmRQrntJi+SimSgp2m7IyzoxOVEBbv9AC6j00fXJz3rIYH83DOP5GKCkZPQmUidF9Y67RLo0wagRQ3F1XpaJ0odrbkslLkGuQhv++lfg88woMaUoLdSr+C0xKLlQN0aDri48ywpoKwQIuwhgo5eOjSDpQYGahcsJgXZm44fS9dnqEs2rnagiZuwELvOKwxOd3kzIw/AFIBpXTNTh2ro42CANQ9NXklWKhKVAZoLRjYTwQlVxagX1II7A4totypizwzyab8jLCnJ/nC8X6TJ+jNy61MPdiXbvZu3GjmkN2CM0bPiZReKKH0DbDAwR0JFuuhvq+kk6lHqooBD3WZ7qFT0QYgMJZ/OQ0lnDeoMiZRGPGL+sPLz5/TLFnluRZrmAg==

function greet(person, date) {
  console.log(`Hello ${person}, today is ${date.toDateString()}!`);
}
greet("Maddison", new Date());

NzoxFl7BiWsx12P8M16dFW2YfX74VcxPJRtbmyObAuBykJsWdqNg3EZkFNywJ8P0zAX2+MIH5uPnuaNXHn1uKKcnTIfBSWMT5sfXANcR8dAIlGYwLgcS9WKoo06RXQ+JZY3+rJNbDvrGnUjQNAnW8+/p+gwTZHAipgiTjf4V2rGn4d2WT2ejEu9HPjVtlQLekUTvK3f5aGFJ/cVyhuQwG3Lk/rCgjJUaQ9RaYBdRxxL6JUoqiprnZ9zqHrEVmWVxQlZDKbfeE8lQax/BqZ73dddxNvqm8z3vjpVRkZm5Nsw=

严格性

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

noImplicitAny

fn4u5xAtnos7Mce/jCKxWuaPUJh5NNzqnA91I1wPr7qwvAhVFL+AQVsBAvrNumNyYvluknPGZjsOoFLEU56XDEQ8ekNxmp1HHpqsClJDXnURQi/JpM5ZU0ocxzQTX39o9vCDaZDulTWX/KzTT3kQXH0hj8ndYismUlCXEUhSRjv2KTY4TpLkEGTc0DkZnYUtnLX1Rt/okehcDdmJ7ZjlDYATSSGvybavY05/RCnyyAiMTnfC01hydC2rcVEqNLAnzpjn1Aru4Tk2hQT2SHZF1i4UsxggwdvxFiSmqvV9EfAl9RSea4CJhEtPbx5PcXxgBx6tTSYxnizSYinCwEPRtCxPeChsPkbUQR+65Vd26t0=

yUtjElym51A183aY6eNH4Sm75GhdNADL8ktqnEr4gercGRLSmy5kpy4SDe8uoeH7XTYh+okqsTBMh0PPpdcPMck9qoQRciXhDfjlJa6acC0q8fAco7TSklbN6BB8LE5S1EcH2kaPf8cuRMPBXM5wzoQmr1hy7pNAznqFiLpA9eTHIqmScUpRMc0VTaT5w26XWgxQyZ56RHxNGcEMAe3mODAqI7LL8nvpJUdo9ZAkqBVoti/1AdfDvtQU+lZyQr6F9Ds2ZrChMziTAX5bj3K2wTSomNh8+IaHToXfFAglxSq7riCx40FHtb5iWwA4QZzkEwSoiIuOYiFkA2OL4Cn3mL65t1fS9eom5L5NaPu54k0/VLujh7OndxGizFiPlye7nLFXaM9pae8t5Vi42+nAmxD3GTIB/LAM+BSuCh3IivCW0+do6pCNZKKZj7jOp9CHz8y7px3Dz0Btjeu7hM3zR8AYOoqlwFtc5cE2D1KsMFoPsjWMwuk1AQVMPSXV36Ab

strictNullChecks

OVpvkAXGgX/zWtWuT48SonHBsWNRG5YzjQiSapmQkm0Gbf1JjRWAWxjaahqqjgNdcXSFMAFF8lSRoz/Ae5OxjcwudCb4sdNd+aUWopHruvjTCgQ0nsbMJAEQcAVGYhuYBpOjMdP+UYIDmA6H3udTHGfPgaz9m481gcdVtim9d6q7RdQhHGgO8bQ21pEMRr8fjYeUeJxTBjiWH7/YVdVdWdSI2AZjzHAg5CrRPVec9R1l9cxQ1uhcrHFa1c+xCVB1FtcnwNqpYI614G3Nh+3H96MCfmtN/xFXrSjhl3kpJTrGiRq/APciEanbAf5OCC7XFn/Aon+gLAVe0h6rexmAQ9ytwHIpS6XE993ZnVCMW94QBPT5BIoy0/pBjOFsu4GORWMtPqjyvaxObE2sRR7abgROrqH8R2zpVrVFaW81An1U8uGmTcbxkwDlWxRWAvxteH3vyfZr7WHCfM/TI2zv8qFGLQlagg1SMR1yPr0PKGM/h101GebEfz2kC0N3PDIdvsdWO6S6CKp4DudT14G1Rbajcl21Cyf/gVsKiKVSLftFKLZmVqwW11wp00BI6YaeHhvmmeHiuVLe0LYukZJPKBrwmNLC6fC4V8T4h1tPMh1L+GquMr3kal1HyCroijPRuzoKbE13iwEe/Monw4yyecG2ZRdyORcg6SeUF4O19o7AmiTE0vUByAGETiQxsyQMbwb8TirVMLcT2jrPUDuwViIR5USQFwAk6UyGpG82VdZa72mIY65thdnkoUXxIh8TJmcP+gPNETH6HLaqtTpG3A==