TS:泛型的使用方法

TS:泛型1. 前言有时候,我们想让一个函数的参数和返回类型是相同的,就可以使用类型变量。类型变量是一种特殊的变量,用于表示类型而不是值。function identity<T>(arg : T) : T{ return arg;}定义了泛型函数后,可以用两种方法使用。一种是传入所有的参数,包括类型参数:let out = identity<string>("yivi");另一种是使用类型推论——即编译器会自动推断类型:let ou
分类: 其他 发布时间: 03-07 08:44 阅读次数: 0

TS:枚举的拓展

TS:枚举的拓展1. 枚举的计算枚举成员可以使用常量枚举表达式进行初始化:enum E { None , OK = 1 << 1, Read = 1 << 2, Write = 2 << 1, ReadWrite = Read | Write, Pending = "123".length}2.枚举成员的类型枚举成员被枚举后,就带有了一种特殊的语义;枚举成员成为了类型:enum E { A
分类: 其他 发布时间: 03-07 08:44 阅读次数: 0

TS:类型的推论兼容

TS:类型的推论兼容1. 变量类型兼容若变量x要兼容y,那么y必须至少拥有与x相同的属性:interface Named { name : string;}let x : Named;let y = { name : 'yivi',age : 12};x = y; // ok,y中拥有x的属性name2. 函数类型兼容首先是参数兼容:要看函数x能否赋值给y,x的每一个参数必须在y里能找到对应类型的参数。(参数名字无所谓,类型一致即可)。let x = (a
分类: 其他 发布时间: 03-07 08:44 阅读次数: 0

Vue:使用History模式打包时注意事项

Vue: 使用History模式打包时需要注意的事项1. 前言今天在使用history模式打包vue项目,后台部署时遇到了种种问题,特地写一篇博客记录一下。2. 路由配置在History模式下,在路由配置文件中首先要将mode改为history;部署项目时,如果在域名后还有额外路径的话,需要注意添加base,作为每次跳转路由时的前缀;以下是设置样例:// router/index.jsexport default new Router({ mode : "histor
分类: 其他 发布时间: 03-07 08:43 阅读次数: 0

TS:装饰器,最大的成就之一

TS:装饰器,最大的成就之一1. 定义装饰器:装饰器是一种特殊类型的声明,能够被附加到类声明,方法,属性或者参数上,可以修改类的行为;装饰器本质是一个方法,可以注入到类、方法、属性参数上来拓展类、方法、属性、参数等功能;常见的装饰器有:类装饰器、属性装饰器、方法装饰器、参数装饰器;装饰器分为两种:普通装饰器(不可传参)和装饰器工厂(可传参);2. 类装饰器类装饰器在类声明之前被声明,用于类构造函数,可以用来监控、修改、替换类的定义。普通装饰器模式// 类装饰器function
分类: 其他 发布时间: 03-07 08:43 阅读次数: 0

TS&&Node:项目实战笔记

TS&&Node:项目实战笔记一、项目初始化首先先初始化一个npm项目npm init其次,在项目目录中初始化tsconfig.json文件tsc --init修改tsconfig.json文件,设置根目录和输出目录:{ "compilerOptions": { "target": "es5", "module": "commonjs", "outDir": "./dist", // 输出目录文件
分类: 其他 发布时间: 03-07 08:43 阅读次数: 0

TS:高级类型的十八般武艺

TS:高级类型1. 交叉类型交叉类型是将多个类型合并为一个类型,使得这个类型包含了所有类型的特性。大多数是在混入mixins或者其他不适合典型面向对象模型的地方看到交叉类型的使用。function extend<T,U>(first: T,second: U):T & U{ let result = <T & U>{}; for (let id in first) (<any>result)[id] = (&
分类: 其他 发布时间: 03-07 08:43 阅读次数: 0

TS:迭代器和生成器

JS:迭代器和生成器当一个对象实现了Symbol.iterator属性时,我们认为他是可迭代的;对象上的Symbol.iterator函数负责返回供迭代的值;for...of语句for...of语句会遍历可迭代的对象或列表,并输出对应的值。let someArray = [1, "string", false];for (let entry of someArray) { console.log(entry); // 1, "string", false}for...
分类: 其他 发布时间: 03-07 08:42 阅读次数: 0

TS:声明合并de妙处

TS:声明合并一、基础概念声明合并是指编译器将针对同一名字的多个独立声明合并为单一声明。合并后的声明同时拥有多个声明的特性。二、声明合并的种类1. 接口合并接口合并的机制时将双方的成员放到一个同名的接口里;接口里的非函数成员必须是唯一的,如果不唯一,必须是统一类型的;如果声明了同名的非函数成员但是类型不同,编译器就会报错;interface Animal { name : string; age : number;}interface Animal {
分类: 其他 发布时间: 03-07 08:42 阅读次数: 0

Vue:nexttick是何方神圣?

Vue:nextTick是何方神圣?1. 官方定义在下次 DOM 更新循环结束之后执行延迟回调。在修改数据之后立即使用这个方法,获取更新后的 DOM。2. 解释Vue.nextTick()其实主要用于生命周期里,当你在上一个钩子函数中需要处理下一个钩子函数层面的内容时,可将这些操作放在Vue.nextTick的回调函数中。当Vue实例进行到该钩子阶段时,会将nextTick中的操作放到下一个钩子阶段去进行,实现了延迟处理。3. 举个例子当你需要在created阶段对dom进行操作时,一
分类: 其他 发布时间: 03-07 08:42 阅读次数: 0

Vue:插槽真香

Vue:插槽真香一、前言插槽为组件提供了灵活性,使用组件的时候可以通过修改插槽的内容实现灵活的展示内容。下面正式介绍一下插槽的使用方法。二、插槽的使用1. 匿名插槽<comp>yivi</comp>let comp = { template : ` <div> <h1>怎央打</h1> <p>朋友们好,我是混元形意太极门掌门人<slot></slot>&lt
分类: 其他 发布时间: 03-07 08:42 阅读次数: 0

HTML5:移动端开发入门

HTML5:移动端开发入门一、前言常见的移动端开发分为移动版网站和响应式设计。移动端开发可以让技术人员专注于移动端的页面优化,而无需在意桌面版的兼容,但页面一旦改动内容,维护成本就翻倍了;响应式设计让开发人员只需维护一份项目,节省开发和维护成本,不过缺点是需要做好移动端和桌面端的兼容,也十分考验页面设计。两种开发方式孰强孰弱,暂无定论,本博客主要探讨一下移动端开发的技巧。二、移动端开发技巧1. Viewport设置传统桌面端网站的显示窗口往往都是在1024X768的分
分类: 其他 发布时间: 03-07 08:41 阅读次数: 0

SVG:基础知识

SVG:基础知识一、viewBox和preserveAspectRatio1. viewBoxsvg的viewBox是一个十分强大的属性,他允许svg画布无限延伸,并且精准控制其可视区域。总共有4个参数,按照x,y,width,height的顺序设置;viewBox的参数是不用单位的,原因是svg的可视空间不是通过像素来定义的,而是一个可以随意延申的空间,这样就可以适应不同的尺寸;我们可以理解为,svg画布会被分成一张网格,即使svg的宽高改变,里面方格的数量也不会改变,因此图形占画布的比例也不
分类: 其他 发布时间: 03-07 08:41 阅读次数: 0

d3.js:取代d3.mouse的d3.pointer

前言今天在学习如何使用d3.js的事件处理函数过程中,发现d3.mouse和d3.event在浏览器报错不是函数,于是前往官方文档,发现这里两个函数已经在d3V6.0中删除了!于是,我在往上查了好久,没有查到替代的函数,只能回头再次翻阅文档,终于被我找到了!对比在V5.0和更早的版本中,sel.on(type,callback)的callback有三个参数:d:绑定当前元素的数据点;index:当前数据点在选择集中的索引;nodes:当前数据点所在的选择集;而在最新的V6.0版本
分类: 其他 发布时间: 03-07 08:41 阅读次数: 0

JavaScript:原型链继承与对象冒充继承及ES6语法的解决

JavaScript:原型链继承与对象冒充继承及ES6语法的解决在ES5语法中,没有类这种概念,只能通过特殊的方式来实现继承;在学习原生js继承的过程中,遇到了两种继承模式的特点,特此记录下来以便下次复习。1.原型链继承原型链继承可以继承构造函数以及原型链上的属性和方法,但实例化子类的时候,无法给父类传参;function Father(name,age){ this.name = name; this.age = age; this.info = function
分类: 其他 发布时间: 03-07 08:41 阅读次数: 0

ES6:几种get和set的使用

ES6:几种get和set的使用一、基于普通对象的实现const demo = { _name = ''; get name(){ return this._name; } set name(val){ this._name = val; }}demo.name = 'yivi';console.log(demo.name); // 'yivi'二、基于class的实现class Demo{ constr
分类: 其他 发布时间: 03-07 08:40 阅读次数: 0

Vue:Object变化侦测

Vue:Object变化侦测1. 什么是变化侦测​ Vue.js会自动检测状态并生成DOM,然后将其输出到页面上,这个过程称为渲染,这个渲染过程是声明式的,我们通过模板来描述状态和DOM之间的映射关系。​ 而通常情况下,我们的页面是不断在更新状态的,此时页面根据状态来重新渲染,想要检测这个过程,就涉及到了变化侦测。​ 变化侦测有两种类型:“推”和“拉”。国内三大主流框架中的Angular和React都采用“拉”,Vue采用的是“推”。​ “推”的优势是,当状态发生变化,Vue能够立刻知道,
分类: 其他 发布时间: 03-07 08:40 阅读次数: 0

Vue:Array变化侦测

Vue:Array变化侦测1. 数组追踪变化​ 与Object不同,数组无法通过getter和setter方式来追踪变化,因此,我们需要自定义一个拦截器来追踪变化。2. 拦截器的准备​ 拦截器其实就是一个与Array.prototype一样的Object,里面所包含的属性一样,但是改变数组的方法是我们修改过的。​ 首先,我们先对Array.prototype来个定制。const arrayProto = Array.prototype;const arrayMethods = Object.
分类: 其他 发布时间: 03-07 08:40 阅读次数: 0

lasinfo error version minor out of range

出现标题的错误,很可能是las文件的版本高于你机器上支持的las库的版本。需要将你的las文件将为较低的版本。说白了就是修改一下las文件中的版本号。执行 pdal translate --writers.las.minor_version=2 input.las output.las...
分类: 其他 发布时间: 03-07 08:40 阅读次数: 0

cmakelists.txt 用法 宏定义

分一下几个方面来描述:1. 每一个LIB要编译成静态库或动态库如何描述,每一个TOOL要编译成可执行文件如何描述?2. LIB和TOOL可能会依赖于其他LIB,该如何描述?3. 每个LIB和TOOL都会include很多头文件,相同的头文件如何处理,私有的头文件如何处理?4. CMake中的一些用法5. LLVM中用到的技巧先举一个简单的例子://└─tutorial....
分类: 其他 发布时间: 03-07 08:39 阅读次数: 0