字面推理

当您使用对象初始化变量时,TypeScript 假定该对象的属性可能会在以后更改值。 例如,如果您编写如下代码:

When you initialize a variable with an object, TypeScript assumes that the properties of that object might change values later. For example, if you wrote code like this:

declare const someCondition: boolean;

const obj = { counter: 0 };
if (someCondition) {
  obj.counter = 1;
}

TkM+ACx+Dk18S56xBx60GKYhK7YxdQqaEdTwN4aNrSeF450AEfAfTbJO27ve6hsIWpJlJA3VcdfBUxawFDqHPioktlvI/5ykNN4aah9XyuNDyL40UtY2ePxHGSxP9L0Em4sTX1zjczOaMTt898oc4GVaSJIOX7if9OXarqahUBeTl196nS6RXqkj6Cm68v39Ydmru4GeVrKJ4UMqR1QU1JMfNbecRa6HTzp3YYBxKDbvV83z4XtODy2z9bahUVDPAd+Zj+Wf27gZgWh/GMS/hu6W6TQetvXmmpiIp0SWW6dpH3aZEvHMNG1KPOBfQDKi9gA4yE8m+E3iO8TT5jbztXo5j11d2l0svu5+s701/DjpUbE7KVABwVbts/SzSjL7d97/6SIvyyx38Y3MoOzphfXGaUAvyYEZqcGAbOs/pZkVlqG/Pee7dfC53qYX8WJSILCompKDNyXD3QOsF2WV0VXxiBj/E+ei7IJdLdO1nuvHpAhOsWE3A9OaoTXjwHEtmbXxY6zLG5+uAfDvJupU2vBEISkvjXcm7yyuP+4Mm8K+EnEgyQryAq4ue7Sk8QdkdLGw5X0nGOpOA0iW//tpQA09jvtR67pQ3OsCPg1ZyVD0vkscistcVuPR0N3E746w0IeYonxHWZ+WGCYyJH5TvOPOGgjKNX0nxlOvVOrykY4ea24MS4bNaDdisR0tznsAshhuKiX58a74Z0Px5iB74IkrKl2jxQMA6KcBg+uRtAo6H8/8NLc1fav5sx3M7DygUoSxpOgC1Y16yO5HGENxIHGwkVh0EHJYOoYgZMWLl6X8W9ndWsrekjAUlSEmU+sN

0JN2TeMsRtOYdIaH2F6sEWU/2cIV19KU7ZnG2Tz/wYe/s/XqJ7bnaMCCng90cGbFNHhXAyqHv9Y0zJLudfIjvCOxcJPolL/qVrqfauQOvyZCFDjvrDpAp1IEQGnbwaIm

declare function handleRequest(url: string, method: "GET" | "POST"): void;

const req = { url: "https://example.com", method: "GET" };
handleRequest(req.url, req.method);

IZSHi8cZ/tLMHSaUJLDnGQ6E7rk+IBc53uqTu1otYXJVhsn6YrOMbX+6CR+dMivwvgoXhPd9kvObBOvwV+aUVAwI/TcxRzaommlMamcuP3z7A22nVrzME1SkzyOiENxdBtiGSXWbnq/CkmOPyfUdIBU0nR9Z3z5XLuF53k8R3AbK7TybFHoV4KqoJk72fTnHqYT0PESNiTxqux54ZX8+JEiCT1gcFvs4Nq1jKqzBws6nfB62eBFJDTEpxW2ZtzRlSZnJNLp+6ppz4kwuGV+9l1e9zwbO6LvCDn7/JkGL0fY28DHmRjJrJM+5z+6en/NtkjiQYFf9WJRMb3lubvsuGE4haz0OgkT+A2oM0YdvuTn3uJc/kUiR/gh6Q/YSE+YXOoa4PiOQK73YwtA8fSgddhT15T73nGYdiKv1ePFK9XQiGuy6uY+7ZslYuoiiA7HQF53oelpp2qSbTi8BDEiuThv059XA4b2WlNOtv/OsXceNnLgUu9VbDqWkQdvjg9HJzodEpoK10cDT5OTUyYX76ADLI8qHb8jOvmOV46EEh8JUHNnI+3+xJXTrkloPN78IyA/61M5s7nowI1m/Mbkr2xw2a2KXH0QittMbqtA9zMrp7SGc2HSuuIp3Xc/D49NmDduLtxnDDY/q24K36fSVJ+s+3TGTF/yuSY/9uco0oX7cAvvjzYfJ0Dt8ysiXG4EHhYQ85tQXuHWGrQ/9OWQacwNNt2nJcnfAvUSXsQaawMABVaabCxnKaSoLUoF958Q7+FoO62aiDzqlxpxbpNjFUN6dpEDerpLWDhT/7/htcFCn+E76vJXyNIx3JvxeQOlslyW3Ed5Hnf0TAQHHI91vXdgbM6mXoTuyZK5tFpm7p/DffA8V+8sH01cosFJt9xl+a8RjKpg7lk4FfxKJmLmSgU+GUR+p1leq+eU8a5QuagH9HEgB7y1/9syn1zfol8nFph+7rPy5XliugQCraPjQxQ==

Px52pWcS9ddGV0jTnA9REx6Kce903tYVoP0lUcNuDBszP9a5rMYI6a7xMh6Vxq/OoS259qVmQNwV/Iuf1biLivgRomi7z4gNgM41c7/VEiz6u+TlQR/TJ93XRgMfGrwiWMjs38FHqr8HMA0Dumdikw==

  1. sYofY4W8Wuz8D3hku6FawBv9yHSbnGUDDGasXnUqI3JMzNjr+y8Gc1IxWkjSZswiIRKcuNjTsGE6gayaK9wmG+4fesLgC+f/jIF9jAZMuXU/gdv+xt2oCf3l3TggdR3xpZoeqhP3HXXWC1gTRNeHTbGOaSNTuvWl2pWO7sy95/j/PZDTlkOVNniMQjujPUG3g/YKSpjVLkATFatYude+F46zzuiLBUDjjyl1GXf/xGI=

    declare function handleRequest(url: string, method: "GET" | "POST"): void;
    
    // Change 1:
    const req = { url: "https://example.com", method: "GET" as "GET" };
    // Change 2
    handleRequest(req.url, req.method as "GET");
    

    mt9WZw1rkslSq6BdeqdlfV3HdFJAcAjQfuVTmqiVdylJ81EwrvDMkrQTepXs2GQyeq3YndE+k8VWBw2tlLN5LXo7b5d+WmikYnHIkXn34IOOSx5G4dXDJEcht01tZUde7QQbhkZGSiXXGHCrKu0AAhj2s7QwgOFU3raggdeXG4IFvtaoU2mlZY32AUZE6G0c954rh/eRR5tHTjgBUevAiAbN65Z2ZfrCJiqwzrlwA1qQITmpdOpLBFDvJlfk9IQaeMlHv5829m77q4s7U+O3QgviSfkwBt+rUF2BEUiqAFixgFHfJ7lrzl/h0k6dq517K8dmCIdN6cMSaKfdhjbDuxHOJVPq6AyK570wUCsPD5+Cup7nBLpl4783CIhm0X5sy9e31jLokY+zePRA3HmhzJ3oDZABJbh8NQApALGEJ6/01UKg2olLoWAklmBAQ1e3JTly+6fIqp8VBx5utHWRjK4UNuZfh2xbtAvviQ3bln+22iuL7Hsk81Q3JYKCAs6XHX4yAzMUVRFXoP4Ante/hVznyUfKc8en4rDJHHyZmWdfOc+P4jVaVs6FpTrVFWMsNYmF1PiKLLNwwTYqSVKPBZNGlxePHtPDHu8p6w2/NKrou/QJVpuGwurq44LiwpSsKZtIpY/Ag+RK1kSyFFDEH3ERp3FDfX6ULIovPzkDoWUQvsqLZBkFtTomJ97DzTYbIPPNwTbPxdLXs+P5b9pRNeKl9wufIAb0IZyMNIUVuKQg78Q2L4SQ5ZA6eH/2nSfxfRW9QskNDst/GyqiPxDkVjdsh1NMeryFyjK64VheSS9z8p2q/nMh/JFWGXUdEcOR

  2. jfDsnFJauATBaPJNLJvmo1UtGXqKTbwwlPcNeZ2599z2fDljHVd3uYdpvbnOVIyqjGIGSCI9GYu+g/60n1WR5bHOL3+aAnHMjHFaJbDBmyVfQvNud4AUnJtl6/fwieHfYIvxgOiwwsQ09yEnKTeTJr4KxrwdNKXHkmPf3ZD5akc1u5CQus+Y4hLRm+B9a/bHkdIxMDHJT6LZYyLwoQov58gS96yqqC0dVb0wdA4any+oP02CtZHq92CkzrzKbSMK

    declare function handleRequest(url: string, method: "GET" | "POST"): void;
    
    const req = { url: "https://example.com", method: "GET" } as const;
    handleRequest(req.url, req.method);
    

Ap8qm7u9VM3TaJPaESnnv0kfqm9UjnWzGXEuNE45zandZIEAIGiddrINZA+0tN1ciKFJwJqk9pxNufU+d+lK5fB/4Z/4A8x4BIEjTZKwFpKHF0Gk2aSmKl/8V64dQfuMifJyK6OmdCMS6CYLRHCGNsYWQ7XY0sfXVYmYBZ19PI0WROFO56EMr6Pusu/pJOhastO7mHKrjIroJXjZ1+boiwYupOHCudtsj8x0E/u3WsFATTuqRrSYI3/qywgSLy0N3wYltTl02dM3MHytcqP3sEn1sLLJGabKfAJZrnvZQYAaZdHyeASA7B2K+xdSklPvN8F/iJGoBQDogn9lVv0/orTLtu9wBXmuW/kkiSi62fbERNKz84rUjpjMBZmKhDpw+oETIcUGFZDDNVI5nJtq+zOyeM//0mmi2BYHMC/VOd81RvUUSALTHGvLuBjL7bLGnv5coDQSP+dGXzHaBc3ESYxc3o28VE/AlGq8wm78/uIa8H9drnFn/4Of9M6ANOicQHNzu+LDHDE3pXqvS+Ng+4lo9xDo47Gedp0J5FWAyuDsUpAax8PtiPxNyx8JbARacZJgGGa/KyyYQSL8g0r7StCO2bzjpQFL2a3Ox75uLOtRiLfAwZvcO+0z6jE6B3Q2