暂时无法关注,以后陌陌关注别人能看到吗吗

内容字号:
段落设置:
字体设置:
精准搜索请尝试:
微软为Visual Studio 2015发布TypeScript 1.6工具
来源:作者:凌空责编:凌空
讯&9月16日消息,微软正式发布TypeScript 1.6。TypeScript是微软构建的一种编程语言,是最为流行的Web开发前端脚本语言JavaScript的超集。JavaScript驱动着亿万网页中的动态交互功能,结合HTML和CSS,控制着页面的布局和样式。TypeScript的出现是为了弥补JavaScript的缺陷:缺乏一种类型安全的,静态的,编译时的保障,便于用于大型项目开发。作为JavaScript的超集,所有的JavaScript代码都是有效的TypeScript代码,使得能够轻松地基于现有的JavaScript项目集成开发。TypeScript 1.6中最主要的新特性就是增加了对&React/JSX的支持。TypeScript 1.6可通过Visual Studio 2015(),Visual Studio 2013()下载,也可在下载,或。
大家都在买
软媒旗下软件:
IT之家,软媒旗下科技门户网站 - 爱科技,爱这里。
Copyright (C) , All Rights Reserved.
版权所有 鲁ICP备号用TypeScript开发爬虫程序_javascript_ThinkSAAS
用TypeScript开发爬虫程序
用TypeScript开发爬虫程序
全局安装typescript:
npm install -g typescript
目前版本2.0.3,这个版本不再需要使用typings命令了。但是vscode捆绑的版本是1.8的,需要一些配置工作,看本文的处理办法。
测试tsc命令:
创建要写的程序项目文件夹:
mkdir test-typescript-spider
进入该文件夹:
cd test-typescript-spider
初始化项目:
安装superagent和cheerio模块:
npm i --save superagent cheerio
安装对应的类型声明模块:
npm i -s @types/superagent --save
npm i -s @types/cheerio --save
安装项目内的typescript(必须走这一步):
npm i --save typescript
用vscode打开项目文件夹。在该文件夹下创建tsconfig.json文件,并复制以下配置代码进去:
"compilerOptions": {
"target": "ES6",
"module": "commonjs",
"noEmitOnError": true,
"noImplicitAny": true,
"experimentalDecorators": true,
"sourceMap": false,
// "sourceRoot": "./",
"outDir": "./out"
"exclude": [
"node_modules"
在vscode打开“文件”-“首选项”-“工作区设置”在settings.json中加入(如果不做这个配置,vscode会在打开项目的时候提示选择哪个版本的typescript):
"typescript.tsdk": "node_modules/typescript/lib"
创建api.ts文件,复制以下代码进去:
import superagent = require(&superagent&);
import cheerio = require(&cheerio&);
export const remote_get = function(url: string) {
const promise = new Promise&superagent.Response&(function (resolve, reject) {
superagent.get(url)
.end(function (err, res) {
if (!err) {
resolve(res);
console.log(err)
reject(err);
创建app.ts文件,书写测试代码:
import api = require(&./api&);
const go = async () =& {
let res = await api.remote_get(&/&);
console.log(res.text);
执行命令:
node out/app
观察输出是否正确。
现在尝试抓取的第一页文章链接。修改app.ts文件,代码如下:
import api = require(&./api&);
import cheerio = require(&cheerio&);
const go = async () =& {
const res = await api.remote_get(&http://cnodejs.org/&);
const $ = cheerio.load(res.text);
let urls: string[] = [];
let titles: string[] = [];
$(&.topic_title_wrapper&).each((index, element) =& {
titles.push($(element).find(&.topic_title&).first().text().trim());
urls.push(&http://cnodejs.org/& + $(element).find(&.topic_title&).first().attr(&href&));
console.log(titles, urls);
观察输出,文章的标题和链接都已获取到了。
现在尝试深入抓取文章内容
import api = require(&./api&);
import cheerio = require(&cheerio&);
const go = async () =& {
const res = await api.remote_get(&http://cnodejs.org/&);
const $ = cheerio.load(res.text);
$(&.topic_title_wrapper&).each(async (index, element) =& {
let url = (&http://cnodejs.org& + $(element).find(&.topic_title&).first().attr(&href&));
const res_content = await api.remote_get(url);
const $_content = cheerio.load(res_content.text);
console.log($_content(&.topic_content&).first().text());
可以发现因为访问服务器太迅猛,导致出现很多次503错误。解决:添加helper.ts文件:
export const wait_seconds = function (senconds: number) {
return new Promise(resolve =& setTimeout(resolve, senconds * 1000));
修改api.ts文件为:
import superagent = require(&superagent&);
import cheerio = require(&cheerio&);
export const get_index_urls = function () {
const res = await remote_get(&http://cnodejs.org/&);
const $ = cheerio.load(res.text);
let urls: string[] = [];
$(&.topic_title_wrapper&).each(async (index, element) =& {
urls.push(&http://cnodejs.org& + $(element).find(&.topic_title&).first().attr(&href&));
export const get_content = async function (url: string) {
const res = await remote_get(url);
const $ = cheerio.load(res.text);
return $(&.topic_content&).first().text();
export const remote_get = function (url: string) {
const promise = new Promise&superagent.Response&(function (resolve, reject) {
superagent.get(url)
.end(function (err, res) {
if (!err) {
resolve(res);
console.log(err)
reject(err);
修改app.ts文件为:
import api = require(&./api&);
import helper = require(&./helper&);
import cheerio = require(&cheerio&);
const go = async () =& {
let urls = await api.get_index_urls();
for (let i = 0; i & urls. i++) {
await helper.wait_seconds(1);
let text = await api.get_content(urls[i]);
console.log(text);
观察输出可以看到,程序实现了隔一秒再请求下一个内容页。
现在尝试把抓取到的东西存到数据库中。安装mongoose模块:
npm i mongoose --save
npm i -s @types/mongoose --save
然后建立Scheme。先创建models文件夹:
mkdir models
在models文件夹下创建index.ts:
import * as mongoose from &mongoose&;
mongoose.connect(&mongodb://127.0.0.1/cnodejs_data&, {
server: { poolSize: 20 }
}, function (err) {
if (err) {
process.exit(1);
export const Article = require(&./article&);
在models文件夹下创建IArticle.ts:
interface IArticle {
export = IA
在models文件夹下创建Article.ts:
import mongoose = require(&mongoose&);
import IArticle = require(&./IArticle&);
interface IArticleModel extends IArticle, mongoose.Document { }
const ArticleSchema = new mongoose.Schema({
title: { type: String },
url: { type: String },
text: { type: String },
const Article = mongoose.model&IArticleModel&("Article", ArticleSchema);
export = A
修改api.ts为:
import superagent = require(&superagent&);
import cheerio = require(&cheerio&);
import models = require(&./models&);
const Article = models.A
export const get_index_urls = async function () {
const res = await remote_get(&http://cnodejs.org/&);
const $ = cheerio.load(res.text);
let urls: string[] = [];
$(&.topic_title_wrapper&).each((index, element) =& {
urls.push(&http://cnodejs.org& + $(element).find(&.topic_title&).first().attr(&href&));
export const fetch_content = async function (url: string) {
const res = await remote_get(url);
const $ = cheerio.load(res.text);
let article = new Article();
article.text = $(&.topic_content&).first().text();
article.title = $(&.topic_full_title&).first().text().replace(&置顶&, &&).replace(&精华&, &&).trim();
article.url =
console.log(&获取成功:& + article.title);
article.save();
export const remote_get = function (url: string) {
return new Promise&superagent.Response&((resolve, reject) =& {
superagent.get(url)
.end(function (err, res) {
if (!err) {
resolve(res);
reject(err);
修改app.ts为:
import api = require(&./api&);
import helper = require(&./helper&);
import cheerio = require(&cheerio&);
(async () =& {
let urls = await api.get_index_urls();
for (let i = 0; i & urls. i++) {
await helper.wait_seconds(1);
await api.fetch_content(urls[i]);
} catch (err) {
console.log(err);
console.log(&完毕!&);
node out/app
观察输出,并去数据库检查一下可以发现入库成功了!
补充:remote_get方法的改进版,实现错误重试和加入代理服务器.放弃了superagent库,用的request库,仅供参考:
//config.retries = 3;
let current_retry = config.retries || 0;
export const remote_get = async function (url: string, proxy?: string) {
//每次请求都先稍等一下
await wait_seconds(2);
if (!proxy) {
proxy = &&;
const promise = new Promise&string&(function (resolve, reject) {
console.log(&get: & + url + &,
using proxy: & + proxy);
let options: request.CoreOptions = {
headers: {
&Cookie&: &&,
&User-Agent&: &Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/53.0. Safari/537.36&,
&Referer&: &/&
encoding: &utf-8&,
method: &GET&,
proxy: proxy,
timeout: 3000,
request(url, options, async function (err, response, body) {
console.log(&got:& + url);
if (!err) {
body = body.toString();
current_retry = config.retries || 0;
console.log(&bytes:& + body.length);
resolve(body);
console.log(err);
if (current_retry &= 0) {
current_retry = config.retries || 0;
reject(err);
console.log(&retry...(& + current_retry + &)&)
current_retry--;
let body = await remote_get(url, proxy);
resolve(body);
} catch (e) {
reject(e);
另外,IArticle.ts和Article.ts合并为一个文件,可能更好,可以参考我另一个model的写法:
import mongoose = require(&mongoose&);
interface IProxyModel {
export interface IProxy extends IProxyModel, mongoose.Document { }
const ProxySchema = new mongoose.Schema({
uri: { type: String },//
ip: { type: String },//
port: { type: String },//
info: { type: String },//
export const Proxy = mongoose.model&IProxy&("Proxy", ProxySchema);
导入的时候这么写就行了:
import { IProxy, Proxy } from &./models&;
其中Proxy可以用来做new、find、where之类的操作:
let x = new Proxy();
let xx = await Proxy.find({});
let xxx = await Proxy.where(&aaa&,123).exec();
而IProxy用于实体对象的传递,例如
function xxx(p:IProxy){
}内容来源:
PHP开发框架
开发工具/编程工具
服务器环境
ThinkSAAS商业授权:
ThinkSAAS为用户提供有偿个性定制开发服务
ThinkSAAS将为商业授权用户提供二次开发指导和技术支持
让ThinkSAAS更好,把建议拿来。
开发客服微信随笔- 279&
评论- 859&
&&&&&&&&&&&
TypeScript一直发展不错,我们公司在开发新功能时,考虑到程序的可维护性,使用了TypeScript编写浏览器上的程序,我们是从零开始使用TypeScript,甚至我连javascript也是半罐子,本文描述了一个c#程序员认识TypeScript的过程。
注:本文编写时,基于Typescript0.8版本,而且初用,可能过时,具体规范可以参考
命名空间和类
作为面向对象的开发人员思维,第一个想到的是TypeScript如何定义类,由于正好我们项目服务端(C#)的原理和客户端(TypeScript)原理完全相同,所以这里正好用C#与TypeScript对比。
namespace Digiwin.Mars.VirtualUI.Engine {
internal sealed class Decoder {}
TypeScript声明类
///&reference path="../Collections/ICollection.ts" /&
module System.Erp.VirtualUI.Engine {
export class Decoder {}
首先简单来说,都有类似命名空间的概念,一个叫namespace,一个叫module,这个就不废话了。
其次,c#要引用其他的类,首先你需要在工程文件中引用dll,然后在文件头上using一个命名空间(可选),但是在TypeScript中,没有这个概念,直接引用一个文件的。
C#里类可以public、internal等等很多级别,还有sealed等修饰符,TypeScript你就忘记这些吧,加入export相当于public,抽象,值类型什么的,这个好像没有。
但是接口是有的。
方法和注释
/// &summary&
解码变更集
/// &/summary&
/// &param name="reader"& 一个变更集读取器对象 &/param&
public void DecodeChangeSet(ChangeRecordReader reader) {
//解码上下文对象
var ctx = new DecodeContext();
TypeScript声明方法
* 传入变更集,将其解码到当前的对象容器。
* @param {System.Erp.VirtualUI.Engine.IChangeRecordReader} reader - 提供记录集。
public Decode(reader: IChangeRecordReader): void {
//解码上下文对象
var ctx = new DecodeContext();
我们首先看到c#的xml 文档专用注释也是支持的,不同他使用的规范。
普通的注释也使用// ,这个完全和javascript相同。
在方法的声明上,TypeScript将返回参数放在后面,对应的,参数的类型也是放在名字后面,如果你声明变量,也是这样的
private _maxId: //在类上定义字段
var item: VirtualO //在方法里定义变量。
在方法的可访问性上,支持public,这样就可以公开还是不公开。
参数和构造
在C#里面,我们经常同一个名字定义多个方法,使用不同的参数类型区分,但是在javascript中不允许,所以TypeScript也不允许。
由于上面的原因,你也就能理解只能有一个构造函数。下面是他的构造函数例子:
constructor(
objectContainer: VirtualObjectContainer,
objectBinder:IObjectBinder
this._objectContainer = objectC
this._binder = objectB
基于javascript的概念,也就没有ref out in这样的关键字,但有命名方式访问参数和可选参数。
我也没有发现override关键字,虽然据说0.8之后新增了。
好了,更多的细节需要你慢慢研究规范文档了,这篇文档可以帮助你入门,使用愉快。
阅读(...) 评论()使用TypeScript开发微信小程序的方法
作者:微软一站式示例代码库
字体:[ ] 类型:转载 时间:
TypeScript是C#之父Anders Hejlsberg的又一力作,很多喜欢c#语法的朋友对typescript都爱不释手,今天小编给大家介绍下TypeScript开发微信小程序的方法,感兴趣的朋友一起看看吧
TypeScript简介:
TypeScript是一种由微软开发的自由和开源的编程语言。它是JavaScript的一个超集,而且本质上向这个语言添加了可选的静态类型和基于类的面向对象编程。安德斯·海尔斯伯格,C#的首席架构师,已工作于TypeScript的开发。
TypeScript扩展了JavaScript的语法,所以任何现有的JavaScript程序可以不加改变的在TypeScript下工作。TypeScript是为大型应用之开发而设计,而编译时它产生 JavaScript 以确保兼容性。
TypeScript 支持为已存在的 JavaScript 库添加类型信息的头文件,扩展了它对于流行的库如 jQuery,MongoDB,Node.js 和 D3.js 的好处。
微信小程序来了!这个号称干掉传统app的玩意儿虽然目前处于内测阶段,不过目前在应用号的官方文档里已经放出了没有内测号也能使用的模拟器了。
工具和文档可以参考官方文档:
TypeScript:
TypeScript是C#之父Anders Hejlsberg的又一力作,相信喜欢C#语法的朋友们对TypeScript一定也会爱不释手。
简单的聊一聊TypeScript吧
TS是一个应用程序级的JavaScript开发语言。
TS是JavaScript的超集,可以编译成纯JavaScript。
TS跨浏览器、跨操作系统、跨主机,开源。
TS始于JS,终于JS。遵循JavaScript的语法和语义,方便了无数的JavaScript开发者。
TS可以重用现有的JavaScript代码,调用流行的JavaScript库。
TS可以编译成简洁、简单的JavaScript代码,在任意浏览器、Node.js或任何兼容ES3的环境上运行。
TypeScript比JavaScript更具开发效率,包括:静态类型检查、基于符号的导航、语句自动完成、代码重构等。
TS提供了类、模块和接口,更易于构建组件。
顺便说一句,TypeScript虽然只关心生成JavaScript之前的这些内容(意味着不关心生成出的JS代码的运行效率),但是根据鄙人的观察和比较,TypeScript所生成的JavaScript代码比绝大部分的前台开发自己写的JavaScript的代码质量高至少一个数量级!!
TypeScript另一个优点:
TypeScript在各大主流的IDE和编辑器里有智能提示!
重要的事情要说三遍!写TypeScript有智能提示!写TypeScript有智能提示!写TypeScript有智能提示!
用TypeScript开发微信小程序
扯了半天TypeScript,那么究竟怎么用TypeScript开发微信小程序呢?
非常简单,和微信官方的JavaScript开发方式没有太大区别,依旧是4个核心文件
App: 代码整个应用程序的抽象对象,可以设置全局的方法和变量
Page: 页面抽象对象,承载页面业务逻辑
WXML: 页面的结构,相当于html
JSON: 配置文件
WXSS: 页面的样式,相当于css
由于目前腾讯没有小程序的TypeScript版本的API,所以OneCode team针对目前腾讯放出的所有的小程序JavaScript API开发了一个TypeScript版本的API类型定义文件 wxAPI.d.ts
只需要在您的程序中引用该文件,如果是使用Visual Studio来开发的话,就能有代码提示了。
下面是用TypeScript开发的Demo App的代码示例:
/// &reference path="./wxAPI.d.ts"/&
onLaunch: function() {
//调用API从本地缓存中获取数据
let logs: any = wx.getStorageSync('logs');
if (!Array.isArray(logs)) {
logs = [];
(&any[]&logs).unshift(Date.now());
wx.setStorageSync('logs', logs);
getUserInfo: function(cb: (param: any) =& void) {
let that = this
if (this.globalData.userInfo) {
cb(this.globalData.userInfo)
//调用登录接口
wx.login({
success: () =& {
wx.getUserInfo({
success: (res) =& {
that.globalData.userInfo = res.userI
cb(that.globalData.userInfo);
globalData: {
userInfo: null
感兴趣的朋友,可以去 上面下载完整的代码样例以及非常关键的微信小程序TypeScript API定义文件!
更多脚本样例, 访问微软One Code样例库:更多代码样例, 访问微软One Script样例库:
以上所述是小编给大家介绍的使用TypeScript开发微信小程序的方法,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具}

我要回帖

更多关于 大姐跳广场舞能看到毛 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信