从C#到TypeScript - 接口 为了更好的抽象出行为和属性,TypeScript在ES6的基础上增加了接口interface。...C#也有interface,不过TypeScript的接口还不大一样,C#里的接口一般是为类服务,让类实现接口中定义的方法或属性。...TypeScript在C#基础上更进一步,由于JavaScript是门非常灵活的语言,TypeScript作为JavaScript的超集需要保持灵活性,所以接口在TypeScript里可以脱离具体的类,...类的接口 这和C#的差不多,描述了公共的成员;不过实现接口语法有点类似于Java,用的是implements。...从实现上看有点类似于C#的delegate。
从C#到TypeScript - Reflect 在C#里如果想只通过名字来生成类实例、获取属性或执行方法可以使用反射,反射是基于元数据,现在很多流行语言都支持元数据,以此来提供更多便利的功能。...ES6和TypeScript也有Reflect,不过因为JavaScript本身是解释型语言,很多操作如根据名字字符串获取属性,根据字符串执行函数这些原本就有支持,Reflect只是把这些操作归结到一起...Set 定义如下: Reflect.get(target, name, receiver); Reflect.set(target, name, value, receiver); 看上去也很好理解,和C#...Reflect.preventExtensions(target) 让一个对象变为不可扩展 Reflect基本上就是把之前Object的方法和一些命令如delete in之类聚到一起,相信ES6之后用
从C#到TypeScript - function 虽然TypeScript里有了类,但JavaScript的function也还在,这也是和C#的不同所在。...C#里函数不能脱离类工作,但TypeScript的function和JavaScript一样,可以单独工作。...同C#里的函数参数可以有默认值一样,TypeScript也支持,并且还支持可空参数。...TypeScript同样可以通过剩余参数来支持,形式上类似于C#的param。 剩余参数的格式是...restParam: string[]。...泛型函数 同C#一样支持泛型函数,写法也差不多。
从C#到TypeScript - Promise 背景 相信之前用过JavaScript的朋友都碰到过异步回调地狱(callback hell),N多个回调的嵌套不仅让代码读起来十分困难,维护起来也很不方便...其实C#在Task出现之前也是有类似场景的,Async Programming Mode时代,用Action和Func做回调也很流行,不过也是意识到太多的回调嵌套代码可读性差且维护不易,微软引入了Task...Promise不能在任务进行中取消,只能等结果返回,这点上不如C#的Task,Task可以通过CancelTaskToken来取消任务。...success'); throw new Error('error'); }).catch(function(error) { console.info(error); // 不会执行到这里...console.info('done')); } catch (e){ console.info(e); // 由于最后面的done,所以会把finally里的异常抛出来,如果没有done则不会执行到这里
从C#到TypeScript - Proxy 我们知道在C#中要实现代理功能需要自己来实现代理类,并且每个类需要不同的代理类,使用起来不方便,虽然借助一些AOP框架可以一定程度实现拦截,但毕竟框架级别的还是太重了
从C#到TypeScript - 类型 TypeScript和C#一样是微软搞出来的,而且都是大牛Anders Hejlsberg领导开发的,它们之间有很多共同点,现在尝试以C#程序员的角度来理解下TypeScript...现在来看下TypeScript基础类型: 数值 C#的数字类型有好几种:int, long, float, double, byte等,而TypeScript和JavaScript一样,所有的数字都是浮点数...,都是用number表示,这样也省了很了事,少了C#里类似long转int overflow问题。...10进制 let num = 0xa4; // 16进制 let num = 0b10010; // 2进制 let num = 0o24; // 8进制 布尔 boolean,和C#...功能上和C#差不多: 目的都是为数值提供一个友好的名字,增加代码可读性和可重构性 默认情况下从0开始编号 也可以手动赋值 可以实现类似C# Flag特性 但也有一些细节不一样: C#的枚举值toString
从C#到TypeScript - Generator 上篇讲了Promise,Promise的执行需要不停的调用then,虽然比callback要好些,但也显得累赘。...console.info(p.next()); console.info(p.next()); 先看下和普通函数的区别,function后面多了一个*,变成了function*,函数体用到了yield,这个大家比较熟悉,C#
从C#到TypeScript - 类 在ES6之前Javascript的类都是用function定义的,ES6把类关键字正式加进来,虽说其实也还是function,不过代码可读性上好了不少。...TypeScript同样支持class,并且和C#也非常相似,下面来看看: 类 同C#一样,由构造函数,属性,方法组成,属性和方法有三个级别的访问权限:private, protected, public...,比C#少个internal。...不过不同的是C#类的成员默认是private,而TypeScript默认是public。 在类里面所有成员都必须用this来访问。...u.checkLogin()); // true u.name = 'test'; console.info(u.checkLogin()); // false 参数属性 上面的User类有两个成员,而且都是从构造函数赋值的
从C#到TypeScript - 变量 TypeScript的变量声明和ES6差不多,相比之前主要是多了let和const 为什么不用var 不管是TypeScript还是ES6都会兼容以前的javascript...虽然C#里也有var,但和JavaScript的可不一样,var在javascript里会有一些奇怪的表现,比如会置前,而且作用域是整个函数,可以不写var来声明变量,然后变量变成全局。...这些都可能会带了一些不容易注意到的问题。...const C#也有const,意义上差不多,都是常量,不想变量被改变。
将项目发布到jcenter仓库可以方便他人直接使用,下面总结一下流程和可能遇到的问题 创建账号 首先进入维护jcenter的网站创建账号:https://bintray.com/ 创建账号时选择个人开发者...(选择企业可能会无法将项目加入到jcenter仓库) ?...创建仓库 登陆后先创建一个自己的maven仓库用于上传及发布 ? 创建仓库时类型选择maven,其他按实际需求填写,仓库的name后面会用到 ?...上传项目 下面开始将项目从本地传到自己刚刚在bintray网站上建立的maven仓库里,这里采用novoda的bintray-release仓库,参考链接:https://github.com/novoda...如果上传项目成功,可以进入到之前创建的项目页面中找到刚刚上传的记录,注意不能上传重复版本号 ?
本文告诉大家如何把 dll 打包到程序中。很多时候的 软件 在运行的时候需要包括很多 dll 或其他的文件,这样的软件在给其他小伙伴,就需要做一个压缩包,或者用安装软件。
C# vs TypeScript - 高级类型 上一篇讲了基础类型,基本上用基础类型足够开发了,不过如果要更高效的开发,还是要看下高级类型,这篇和C#共同点并不多,只是延用这个主题。...联合类型 可以从字面上进行理解:其实就是多个类型联合在一起,用|符号隔开。 如: string | number, 表示希望这个类型既可以是string,又可以是number。...TypeScript和C#一样,只不是圆括号改成尖括号。...这点上比C#来得好,一般C#做法可能是用as操作符转过来,然后判断是否为空,如果类型多操作起来也很复杂。 类型别名 类型别名即可以为现有类型取一个新名字。...= System.Generic.List做个别名,不过还是不一样,C#的是可以实例化的。
从C#到TypeScript - async await 上两篇分别说了Promise和Generator,基础已经打好,现在可以开始讲async await了。...async await是ES7的议案,TypeScript在1.7版本开始支持async await编译到ES6,并在2.1版本支持编译到ES5和ES3,算是全面支持了。...async await 用法 和C#里的十分相似,看个例子: function delay(): Promise{ return new Promise((resolve...async function run(){ await Promise.reject('error'); // 这里出异常 console.info('continue'); // 不会执行到这里...this, void 0, void 0, function* () { yield delay(); console.info('run'); }); } 可以注意到其实还是用
从C#到TypeScript - 装饰器 在C#里面如果想要不直接修改类或方法,但给类或方法添加一些额外的信息或功能,可以想到用Attribute,这是一个十分方便的功能装饰器。...function Testable(target: Function) { // 类、方法、属性、方法参数的参数各不相同 //这里可以记录一些信息到target,或者针对target做一些处理,...即属性描述符,有 configurable 是否可以配置,如动态添加删除函数属性之类 writable 是否可写,可以用来设置只读属性 enumerable 是否可枚举,即是否能在for...in中能枚举到...value 对象或属性的值 有了这些参数就可以很好的给方法添加一些功能,比如下面实现类型WebApi里的Get的路由: const Router = Symbol(); // 唯一key,用来存装饰器的信息
记得去年博主还写过一篇 《Golang 装逼指南 Ⅱ:在 Homwebrew 上发布 Golang 项目》,当时只是介绍了如何将 Golang 开发的 CLI 工具发布到自建的 homebrew-tap...$ git checkout master 更新 master 分支 $ brew update 从最新的 master 分支创建新 branch $ git checkout -b <YOUR_BRANCH_NAME...提交 PR 提交新版本 PR 合并成功后,如果要发布新版本,这里推荐两种方式提交新版本。...原理其实也是使用了 brew bump-formula-pr,但是这样就无需手动触发,可以集成到 Release 的 CI 中。...使用 brew 不但简化了安装步骤,提升了用户体验,还可以把诸如 completion 命令生成的自动补全脚本在安装时就注入到系统中,无需在装好后再进行其他操作,体验极佳。
本文告诉大家如何把 dll 打包到程序中。很多时候的 软件 在运行的时候需要包括很多 dll 或其他的文件,这样的软件在给其他小伙伴,就需要做一个压缩包,或者用安装软件。...参见:http://www.cnblogs.com/blqw/p/LoadResourceDll.html ILMerge将源DLL合并到目标EXE - HackerVirus - 博客园 ----
[确定]: 发起持久化WebAPI(利用第2步返回的图片Id) 为什么强调支持集群部署? 就这个功能而言,[上传预览]和[确定保存]是两次Http WebAPI请求。...做图片上传 IFormFile能力如下红框: ?...下面将图片二进制流转化为 base64字符串,注入Abp缓存组件IDistributedCache;缓存图片字符串1小时。...会话亲和性 下面从nginx、Azure、k8s ingress 三角度配置[会话亲和性],(全站生效) 会话亲和性的实现原理,是在接受客户端首次请求时响应某个cookie,服务器会认定使用同一个cookie...这样,请求将总是被定向到相同的上游服务器。 https://kubernetes.github.io/ingress-nginx/examples/affinity/cookie/ ?
最近,我又开始考虑这个问题,并意识到有一个我没有考虑过的解决方案:我可以继续维护 WordPress 服务器,但将其设置为发布静态镜像,并使用 GitLab Pages(或 GitHub Pages ,...然而,这意味着评论将无法使用,但在这种情况下感觉就像是一个小损失,因为博客没有收到很多评论。...将公共 URL https://www.localconspiracy.com 托管到 GitLab Pages 上。 添加 cron 任务,确定两个 URL 之间的最后构建日期何时不同。...使用 wget 镜像后,将所有链接从“私有”更新成“公共”。 运行 git push 来发布新内容。 这是我使用的两个脚本: check-diff.sh (cron 每 15 分钟调用一次): #!...现在,当博客发生变化时,在 15 分钟内将网站镜像到静态版本并推送到仓库,这将在 GitLab Pages 中反映出来。 如果你想在本地运行 WordPress,这个概念可以进一步扩展。
jar包发布到本地maven仓库,以便在maven和gradle项目中使用呢?...现以发布腾讯的短信服务SDK为例子,发布到本地maven仓库 1. 下载腾讯短信服务源代码 ? 2. 编译源代码,生成jar包 mvnpackage ? 3....发布该jar包到本地maven仓库(错误示范) $ mvn install:install-file-Dfile=C:\Users\11851\Downloads\qcloudsms_java-1.0.4...所以上面那种写法将-Dfile写成绝对路径的方式行不通,应该是将-Dfile写成与jar包与当前命令行所在位置的相对路径。... 一般在项目中的使用场景 是将需要手动发布的jar包放在当前项目下,再把相应的发布脚本写在
将项目发布到JCenter大致流程如下: ? 具体步骤: ---- 第一步:注册Bintray拿到API Key 如果你已经有账号,则可以跳过这一步,直接往下看。...bintray.apikey") configurations = ['archives'] pkg { repo = "maven" name = "ScanProj" //发布到...文件加入忽略文件中不上传,以保护你的apikey 第三步:将项目提交到Bintray 如果你一完成了上述的配置后,下面只需要一行代码就可以完成将项目提交到Bintray。...第四步:将提交到Bintray的项目发布到JCenter 完成上述的步骤只是将项目提交到bintray,还无法使用该项目库,因为还没有发布到JCenter。...审核成功后就可以使用你发布到JCenter上的项目了。 使用你发布到JCenter上的项目 在Bintray的搜索输入框中输入你的项目: 如图: ?
领取专属 10元无门槛券
手把手带您无忧上云