- 博客(353)
- 资源 (11)
- 问答 (1)
- 收藏
- 关注
原创 【阮一峰】13.装饰器
装饰器(Decorator)是一种语法结构,用来在定义时修改类(class)的行为。在语法上,装饰器有如下几个特征。(1)第一个字符(或者说前缀)是,后面是一个表达式。(2)后面的表达式,必须是一个函数(或者执行后可以得到一个函数)。(3)这个函数接受所修饰对象的一些相关值作为参数。(4)这个函数要么不返回值,要么返回一个新对象取代所修饰的目标对象。${${装饰器有多种形式,基本上只要在@符号后面添加表达式都是可以的。下面都是合法的装饰器。:::tip后面的表达式,最终执行后得到的应该是一个函数。
2025-02-25 17:30:10
250
原创 【阮一峰】20.注释指令
告诉编译器不对当前脚本进行类型检查,可以用于 TypeScript 脚本,也可以用于 JavaScript 脚本。JavaScript 脚本顶部添加了,即告诉编译器对该脚本进行类型检查,不论是否启用了checkJs编译选项。可以用于 TypeScript 脚本,也可以用于 JavaScript 脚本。告诉编译器不对下一行代码进行类型检查,可以用于 TypeScript 脚本,也可以用于 JavaScript 脚本。
2025-02-25 17:02:33
424
原创 【阮一峰】19.类型工具
不返回类型,只用来跟其他类型组成交叉类型,用来提示 TypeScript 其他类型里面的。类型是任何其他类型的子类型,它跟其他类型组成联合类型时,可以直接将。用来生成一个只读数组类型,类型参数 Type 表示数组成员的类型。如果它的类型参数不是 Promise 类型,那么就会原样返回。提取函数类型 Type 的返回值类型,作为一个新类型返回。提取构造函数的返回值的类型(即实例类型),参数。就相当于删除兼容的类型,剩下不兼容的类型。类型,组成一个新类型返回,也就是返回。里面提取参数类型,组成一个元组返回。
2025-02-25 17:00:58
935
原创 【阮一峰】18.类型映射
映射(mapping)指的是,将一种类型按照映射规则,转换成另一种类型,通常用于对象类型。在语法上,是一个属性名表达式,表示这里的属性名需要计算得到。propinkeyof AA为了增加代码复用性,可以把常用的映射写成泛型。是属性名索引形式的映射写法。通过映射,可以把某个对象的所有属性改成可选属性。通过映射,将所有属性改为只读属性。
2025-02-21 08:47:52
326
原创 【阮一峰】17.类型运算符
keyof是一个单目运算符,接受一个对象类型作为参数,返回该对象的所有键名组成的联合类型。由于keyof返回的类型是,如果有些场合只需要其中的一种类型,那么可以采用交叉类型的写法。如果对象属性名采用索引形式,keyof会返回属性名的索引类型。因为 JavaScript 属性名为字符串时,包含了属性名为数值的情况,数值属性名会自动转为字符串。取出的是键名组成的联合类型,如果想取出键值组成的联合类型,可以像下面这样写。
2025-02-21 08:46:37
936
原创 【阮一峰】16.类型声明文件
单独使用的模块,一般会同时提供一个单独的类型声明文件(declaration file),把本模块的外部接口的所有类型都写在这个文件里面。类型声明文件里面只有类型代码,没有具体的代码实现。它的文件名一般为[模块名].d.ts的形式,其中的 d 表示(声明)。类型声明文件也可以使用export =命令,输出对外接口。除了使用export =,模块输出在类型声明文件中,也可以使用表示。类型声明文件也可以包括在项目的。
2025-02-21 08:45:27
723
原创 【阮一峰】15.declare
declare关键字用来告诉编译器,某个类型是存在的,可以在当前文件中使用。它的主要作用,就是让当前文件可以使用其他文件声明的类型。declare关键字可以描述以下类型。constletvartypeinterfaceclassenumfunctionmodulenamespacedeclare关键字的重要特点是,它只是通知编译器某个类型是存在的,不用给出具体实现。declare只能用来描述已经存在的变量和数据结构,不能用来声明新的变量和数据结构。另外,所有declare。
2025-02-18 13:07:28
897
原创 【阮一峰】14.命名空间
namespace是一种将相关代码组织在一起的方式。出现在 ES 模块诞生之前,作为 TypeScript 自己的模块格式而发明的。但是,自从有了 ES 模块,官方已经不推荐使用namespace了。
2025-02-18 13:06:17
319
原创 【阮一峰】12.模块
任何包含 import 或 export 语句的文件,就是一个模块(module)。相应地,如果文件不包含 export 语句,就是一个全局的脚本文件。模块本身就是一个作用域,不属于全局作用域。模块内部的变量、函数、类只在内部可见,对于模块外部是不可见的。暴露给外部的接口,必须用 export 命令声明;如果其他文件要使用模块的接口,必须用 import 命令来输入。如果一个文件不包含 export 语句,但是希望把它当作一个模块(即内部变量对外不可见),可以在脚本头部添加一行语句。
2025-02-18 13:05:09
771
原创 【阮一峰】11.类型断言
类型断言并不是真的改变一个值的类型,而是提示编译器,应该如何处理这个值。类型断言有两种语法。推荐使用语法二。类型断言的一大用处是,指定unknown类型的变量的具体类型。
2025-02-18 11:57:24
271
原创 【阮一峰】9.泛型
泛型的特点就是带有“类型参数”(type parameter)。T有些复杂的使用场景,TypeScript 可能推断不出类型参数的值,这时就必须显式给出了。
2025-02-18 11:56:12
265
原创 【阮一峰】6.对象
对象的类型就写在变量名后面,使用大括号描述,内部声明每个属性的属性名和类型。属性的类型可以用分号结尾,也可以用逗号结尾。一旦声明了类型,对象赋值时,就不能缺少指定的属性,也不能有多余的属性。对象的方法使用函数类型描述。对象类型可以使用方括号读取属性的类型。除了type命令可以为对象类型声明一个别名,interface命令可以把对象类型提炼为一个接口。:::tipTypeScript 不区分对象自身的属性和继承的属性,一律视为对象的属性。只声明了prop属性,但是不报错,因为它继承了原型上的。
2025-02-18 11:54:54
475
原创 【阮一峰】5.函数
函数的类型声明,需要在声明函数时,给出参数的类型和返回值的类型。如果变量被赋值为一个函数,变量的类型有两种写法。函数类型里面的参数名与实际参数名,可以不一致。用type命令为函数类型定义一个别名,便于指定给其他变量。函数的实际参数个数,可以少于类型指定的参数个数,但是不能多于,即 TypeScript 允许省略参数。如果一个变量要套用另一个函数类型,可以使用typeof运算符。函数类型还可以采用对象的写法。对象写法非常适用在函数有属性的场合。函数类型也可以使用 Interface 来声明。
2025-02-18 11:52:48
992
原创 【阮一峰】4.symbol
每一个Symbol值都是独一无二的,与其他任何值都不相等。Symbol值通过Symbol()函数生成。TypeScript 中,Symbol的类型使用symbol表示。
2025-02-18 11:51:19
242
原创 【阮一峰】3.元组
元组表示成员类型可以自由设置的数组,即数组的各个成员的类型可以不同。元组必须明确声明每个成员的类型,越界的成员会报错。TypeScript 的区分方法是,成员类型写在方括号里面的就是元组,写在外面的就是数组。元组成员的类型可以添加问号后缀(?),表示该成员是可选的。问号只能用于元组的尾部成员,也就是说,所有可选成员必须在必选成员之后。使用扩展运算符(...),可以表示不限成员数量的元组。扩展运算符用在元组的任意位置都可以,但是它后面只能是数组或元组。元组可以通过方括号,读取成员类型。
2025-02-18 11:49:38
157
原创 【阮一峰】2.数组
所有成员的类型必须相同,但是成员数量是不确定的。由于成员数量可以动态变化,所以 TypeScript 不会对数组边界进行检查,越界访问数组并不会报错。TypeScript 允许使用方括号读取数组成员的类型。或。
2025-02-18 11:47:31
192
原创 【阮一峰】10.枚举
Enum结构,用来将相关常量放在一个容器里面,方便使用。使用时,调用Enum的某个成员,与调用对象属性的写法一样,可以使用点运算符,也可以使用方括号运算符。结构本身也是一种类型。Enum结构的特别之处在于,它既是一种类型,也是一个值。绝大多数 TypeScript 语法都是类型语法,编译后会全部去除,但是Enum结构是一个值,编译后会变成 JavaScript 对象,留在代码中。结构比较适合的场景是,成员的值不重要,名字更重要,从而增加代码的可读性和可维护性。由于Enum。
2025-02-18 11:44:24
800
原创 【阮一峰】7.接口
方括号运算符可以取出interface某个属性的类型。可以表示对象的各种语法,它的成员有 5 种形式。(1)对象属性如果属性是可选的,就在属性名后面加一个问号。如果属性是只读的,需要加上readonly修饰符。(2)对象的属性索引属性索引共有stringnumber和symbol三种类型。一个接口中最多只能定义一个字符串索引。字符串索引会约束该类型中所有名字为字符串的属性。属性的数值索引,其实是指定数组的类型。一个接口中最多只能定义一个数值索引。数值索引会约束所有名称为数值的属性。:::tip。
2025-02-18 11:41:35
837
原创 【阮一峰】8.类
类的属性可以在顶层声明,也可以在构造方法内部声明。对于顶层声明的属性,可以在声明时同时给出类型。如果不给出类型,TypeScript 会认为 x 和 y 的类型都是 any。如果声明时给出初值,可以不写类型,TypeScript 会自行推断属性的类型。
2025-02-18 11:35:32
917
原创 flutter 动画
使用 PageRouteBuildercontext,transitionDuration: Duration(milliseconds: 500), //动画时间为500毫秒//使用渐隐渐入过渡,child: PageB(), //路由B},),继承 PageRoute 类Hero 动画。
2024-08-27 18:43:42
889
原创 flutter组件分类
使用场景:获取组件大小和相对于屏幕的坐标获取组件相对于某个父组件的坐标延伸:Flutter 的build 和 layout 是可以交错执行的,并不是严格的按照先 build 再 layout 的顺序。Sliver布局协议Viewport将当前布局和配置信息通过SliverConstraints传递给SliverSliver 确定自身的位置、绘制等信息,保存在 geometry 中(一个 SliverGeometry 类型的对象)
2024-08-07 15:33:27
1059
原创 flutter生命周期
flutter生命周期initState调用时机widget 第一次插入到 widget 树时应用状态初始化订阅事件通知didChangeDependencies()调用时机State对象的依赖发生变化时组件第一次被创建后挂载的时候(包括重创建)应用当系统语言 Locale 或应用主题改变时,Flutter 框架会通知 widget 调用此回调build()调用时机在调用initState()之后在调用didUpdateWidget()之后在调用setState()之后在
2024-07-24 17:36:30
219
原创 flutter基础组件概览
每一个flutter项目的lib目录里面都有一个main.dart,这个文件就是flutter的入口文件;其中的main方法是dart的入口方法。runApp方法是flutter的入口方法。demo1:Text展示文本demo2:TextStyle增加样式demo3:AppBar与body展示demo4:抽离组件内容为HomeWidget3、内容单独抽离为组件demo1:demo2:4、MaterialApp组件、Scaffold组件MaterialApp它封装了应用程序实现Materi
2024-07-24 17:24:15
529
原创 五、maptalks:demo、源码、桌面端软件
demohttps://bidding-m.gitee.io/maptalks-test-next/#/源码https://gitee.com/bidding-M/maptalks-test-next桌面端。
2023-12-13 10:26:12
627
原创 六、mapbox:demo、源码、桌面端软件
demo地址https://bidding-m.gitee.io/mapbox-test/#/源码https://gitee.com/bidding-M/mapbox-test桌面端。
2023-12-13 10:11:42
669
原创 二、maptalks搭载vue3测试demo(11-20)
isects、right click menu、infoWindow、image marker、multi image marker...
2023-12-13 10:01:31
678
原创 二、mapbox搭载vue3测试demo(11-20)
自定义图标click显示弹出窗、自定义图标hover显示弹出窗、自定义图标显示popper、实时数据更新图标的位置、 更新建筑物的样式...
2023-12-13 09:57:07
210
原创 五、mapbox搭载vue3测试demo(41-50)
3D模型、 视频播放图层、 鼠标悬停效果、 高亮包含相似数据的部分、切换列表筛选符号...
2022-05-15 20:23:48
561
原创 三、mapbox搭载vue3测试demo(21-30)
可拖动的点、 marker、可拖动的marker、GeoJSON 点、 GeoJSON 线...
2022-05-15 20:16:49
681
原创 G6实现家族族谱关系图
二话不说就上效果图:当然我最初想要的效果图是这个样子的:来看看我们的实现代码吧:<template> <div class="demo g6"> <CommonTitle></CommonTitle> <div class="content"> <div id="container"></div> </div>
2021-09-11 09:15:27
1750
原创 一、mapbox搭载vue3测试demo(1-10)
添加custom point、添加icon point、添加circle point、添加marker、添加line...
2021-08-08 14:51:43
1423
6
原创 zoomcharts图库的惊人效果——net chart
zoomcharts官网案例:https://zoomcharts.com/en/javascript-charts-library/use-cases/zoomcharts API:https://zoomcharts.com/developers/en/introduction.html源码位置:https://gitee.com/bidding-M/demo-test/blob/master/src/views/TestZoomcharts.vue...
2021-07-04 13:44:31
992
原创 零基础学习cesium及demo(1-20)
测试demo地址:https://codechina.youkuaiyun.com/LiyangBai/cesium-test1、baseViewer2、addEntity1)box2)cone3)corridor4)cylinder5)ellipse6)ellipsoid7)point8)polygon9)polyline10)polylineVolume11)rectangle12)wall欢迎各位同僚指正。
2021-03-20 13:31:23
640
原创 在vue项目中自定义事件总线eventHub
由于在工作中vue的项目中使用了大量是全局事件总线广播,使得某些方法在某种情况下被重复多次调用,查看了一下原因,是因为在每个单文件组件中定义的事件接收器和事件广播器在页面销毁的时候没有注销导致的。于是在保证改动量不大的前提下,决定自定义一个全局事件总线文件。之前的使用是在 main.js 文件中 vue.prototype.$eventHub = vue.prototype.$eventHub || new Vue()因此,重新定义一个文件 EventHub.js/** * Created
2021-01-03 13:49:19
844
vue3父子组件引入同一个hooks,父组件更新list数据后,子组件模板没有更新?
2022-03-30
TA创建的收藏夹 TA关注的收藏夹
TA关注的人