回答了问题2024-07-18
话先说在头,其实TS官网教程类型收窄这章里,讲到typeof检查、in检查,已经能做到大部分情况的类型收窄了,一般业务开发没必要过于苛求运行时的检查。像题主的例子里,if ('name' in some) {}和if ('food' in some) {}就能自动收窄Person和Animal了。除非你对类型检...
回答了问题2024-07-12
这个功能才出没多久,考虑兼容旧的浏览器,你可能需要更新core-js。另外,你用了TS,如果需要通过类型检查,可能还要把TS更新到5.4或以上,然后在tsconfig.json里确保配置lib有ESNext这一项。
回答了问题2024-07-12
为什么要实例化FileReader再用?实例化再用,更容易扩展逻辑。比如你的例子, {代码...} 如果后续有人反馈,文件很大,读取文件需要很长时间,希望加进度条,有了FileReader实例,我们就能方便地再加一个监听函数 {代码...} 如果后续又有人提出增加可以取消按钮,我们...
回答了问题2024-06-28
知道为什么JS的String、Array的包含方法不像其他语言那样叫a.contains(),而是叫a.includes()吗?因为曾经有个大聪明(MooTools),在String.prototype上挂了个非标准的contains(),结果标准委员会只好改名为includes,避免破坏那些旧的contains()的行为,导致使用Mo...
回答了问题2024-06-18
你这个类型适用Record类型,类似其他语言的map和字典。参见recordkeys-type。所以fromDetail类型可以写成Record<string, TestType>
回答了问题2024-06-10
这是个利用.d.ts声明的模块。你截图里不是有一行/// <reference path="./editor.api.d.ts" />吗?你打开它,就看到里面是
回答了问题2024-06-06
你可能需要提供更多的信息来确定原因。比如创建一个空白的TS文件来写类似的代码,看能不能正确收窄。我这里创建一个类似的结构,else里正常收窄为false。
回答了问题2024-06-02
现代JS(包括TS)开发直接写ESM这一规范就好了,不需要手写其他规范的模块了。如果你担心旧环境的兼容,可以利用构建工具(比如webpack、rollup),把ESM转成其他的规范。比如一段ESM代码。
回答了问题2024-06-01
这蓝色的线对应的就是左边最大频率的记录图。CPU并不总是在基准频率下运行的,如果系统任务不多,CPU就会把工作频率降到基准频率以下,这个值就会低于100%。
回答了问题2024-05-08
有的库,本体就已经自带类型声明,不需要额外安装@types/*,比如vue。但有的库,本体和类型声明是分开的,比如react和@types/react,需要分开装。
回答了问题2023-05-11
如果是要长期维护的话,我倾向于new/edit/detail共用一个页面。不然以后如果有需求变动的话,一个变更就要改三个页面,三倍的工作量,那酸爽你知道的。
回答了问题2023-04-10
在JS(无论ES6以上还是以下)里,函数被调用时,并不会检查传入的参数数量是否符合定义时的数量。所以利用这个特性,JS可以实现任意数量的可选参数。
回答了问题2023-02-10
参考方法 {代码...} 但有时候没必要做得那么极端。像你这代码一看就懂得是在复制属性,可以偷个小懒直接写成 {代码...} 毕竟工具用来给人服务的,这种一看就不会出错的代码没必要还被工具束缚。此外,如果是为了合并对象,还可以直接用 {代码...} 请根据自己的需求选...
回答了问题2023-02-10
Optional Chaining 只负责null/undefined判断,不负责判断它是不是function。如果a非null非undefined也非function,a?.()就会抛出错误。
回答了问题2023-02-08
YearHour[]是个数组,你应该先取数组元素,像yearHour$.value[index].list这样才能访问到list。
回答了问题2023-02-08
Ant Design Pro是一个脚手架,它包含了一整套项目模板,包括路由、菜单、布局等等,全都帮你整合好了,你可以拿来就用,改改就成为你的项目。就像这样的网站:[链接]
回答了问题2023-01-30
简短解释:RequireJS是十多年前JS还缺少模块系统时的产物,方便在浏览器项目里管理JS的依赖和加载。随着ES Modules规范的推出,流行前端打包工作流(比如webpack、rollup、esbuild)之后,RequireJS已经不再流行,很少在新项目里使用了。
回答了问题2023-01-23
{代码...} 这样可以选择某一个元素,比如第3个,然后设置为display: none;就是隐藏它。
回答了问题2023-01-20
要明白为什么要有事件,那是因为我们期望在某个时刻,希望某个函数被调用,而事件就是这个函数的触发时刻。所以说,HTML这边触发了某个事件,引起JS这边的某个函数被调用。那么按照这个角度,事件的接受方就必然是JS。你要理解为“事件从HTML向JS传递”也是可以的,那...
回答了问题2023-01-18
以前的IE浏览器确实如此,它会把下载到的脚本、样式、图片写在它的缓存目录下,你甚至可以直接用文件管理器去找到具体的文件(可以运行%LOCALAPPDATA%\Microsoft\Windows\INetCache打开所在位置)。但是现在的浏览器不会这么做了,它们有自己的存储格式。虽然也会写...