Click here to close now.





















Welcome!

@CloudExpo Authors: Liz McMillan, Jim Scott, Elizabeth White, Bob Gourley, Carmen Gonzalez

Related Topics: @ThingsExpo, Microservices Expo, @CloudExpo, @DevOpsSummit

@ThingsExpo: Blog Feed Post

Migrating from JavaScript to TypeScript | @CloudExpo #DevOps #Microservices

To let other TypeScript libraries use your library, you need to create a .d.ts file to declare all your public APIs

The Benefits of Migrating from JavaScript to TypeScript

By Raphael Feng

Recently, we moved our Browser RUM agent from JavaScript to TypeScript. In my last post, I focused on walking through the steps of migrating from JavaScript, the challenges, and best practices we uncovered along the way.

This one will focus on more details of the benefits and one missing feature in TypeScript compiler we suggest to implement.

TypeScript's main benefits:

  1. Class and Module Support
  2. Static Type-checking
  3. ES6 Feature Support
  4. Clear Library API Definition
  5. Build-in Support for JavaScript Packaging
  6. Syntax Similarity to Our Backend Languages (Java, Scala)
  7. Superset of JavaScript  (easier to learn for JavaScript developers than CoffeeScript or ClojureScript)

Class and Module Support
Keywords like class, interface, extends and module are available in TypeScript.

You can define a class as

// class define in TypeScript
class VirtualPageTracker extends Tracker {
private virtualPageName: string = '';
constructor(name) {
super(name);
}

getName(): void {
return this.virtualPageName;
}

static getTrackerName(): string {
return 'VirtualPageTracker';
}
}

TypeScript compiler will transcompile it to

var __extends = (this && this.__extends) || function (d, b) {
for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p];
function __() { this.constructor = d; }
d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); };
// class define in TypeScript
var VirtualPageTracker = (function (_super) {
__extends(VirtualPageTracker, _super);
function VirtualPageTracker(name) {
_super.call(this, name);
this.virtualPageName = '';
}
VirtualPageTracker.prototype.getName = function () {
return this.virtualPageName;
};
VirtualPageTracker.getTrackerName = function () {
return 'VirtualPageTracker';
};
return VirtualPageTracker;
})(Tracker);

Static Type-checking
TypeScript compiler will check the type (to surface more typing errors at compiling time)

var name: string;
name = 2; // type error, assign a number to a string type variable

function foo(value: number) {}
foo(''); // type error, use a number as a string type parameter

interface Bar {
setName: (name: string) => void;
getName: () => string;
}


var bar: Bar = {
getName: function() {
return 'myName';
}
} // type error, setName function is missing in the object assigned to bar.

A practical example is if we use the wrong data type in our browser agent beacon, we now get compiling errors. Before migrating to Typescript, they could only be found by testing against the back-end.

ECMAScript 6 Feature Support
It is the current version of the ECMAScript Language Specification with more language features.

With TypeScript, you can start using many ES6 features although it may not be supported in your target browser. TypeScript compile can compile the ts files into "ES3", "ES5" or "ES6".

Some of the ES6 features are very handy like:

// for..of loops
var arr = ['a', 'b', 'c'];
for (let item of arr) {
console.log(item);
}

would be compiled to

// for..of loops
var arr = ['a', 'b', 'c'];
for (var _i = 0; _i < arr.length; _i++) {
var item = arr[_i];
console.log(item);
}

Refer to TypeScript ES6 Compatibility Table for more ES6 features you can use.

Clear API Definition
To let other TypeScript libraries use your library, you need to create a .d.ts file to declare all your public APIs of your library with the typing information. The enforce to clearly list all your public APIs for each libraries you are developing. We found it serves as a quick and accurate reference for all your APIs.

Refer to https://github.com/borisyankov/DefinitelyTyped for TypeScript definition files created for large amounts of JavaScript libraries.

Build-in Support for JavaScript Packaging
You can define one main entry ts file referring all the ts files you needed in the compiled js file.

Running tsc (the TypeScript compiler) with the -out option, the compiler will concatenate all the directly or indirectly referred files into one js file in the order they are referred.

So we can easily tailor our library into multiple versions. For example, from the same code base, we can generate specific versions of browser agent for desktop browser and mobile browser with specific features for different devices. We just need to create a main entry file for each version with the files for specific features referred in it.

Syntax Similarity to Our Backend Languages (Java, Scala)
Due to the similarity, our developers now can switch between front-end and back-end programming more smoothly.

Refer http://www.slideshare.net/razvanc/quick-typescript-vs-scala-sample for a quick syntax comparison between TypeScript and Scala.

Superset of JavaScript
This means a more smooth learning curve for JavaScript developers which helps to faster adoption of TypeScript in your projects.

One Missing Feature Suggested
In addition to the benefit, we also found some missing features could be implemented.

One of them is to merge the same module into the same function rather than multiple functions.

module A {
function foo() { }
}

module A {
function bar() {
foo();
}
}

generates below code with compiling error "cannot find name ‘foo'".

ar A;
(function(A) {
function foo() {}
})(A || (A = {}));
var A;
(function(A) {
function bar() {
foo();
}
})(A || (A = {}));

foo function defined within the first anonymous function call for module A is not visible in the second anonymous function call, so you have to export it as:

module A {
export function foo() {}
}

module A {
function bar() {
foo();
}
}

generates below code without error:

var A;
(function(A) {
function foo() {}
A.foo = foo;
})(A || (A = {}));
var A;
(function(A) {
function bar() {
A.foo();
}
})(A || (A = {}));

The problem here is now A.foo is not only visible to module A. Anyone can call it and modify it now.

There is no module level visible concept which should be similar to Java's "package-private" when there is no modifier for Java classes or members.

This could be solved by generating:

module A {
export function foo() {}
}

module A {
function bar() {
foo();
}
}

to

var A;
(function (A) {
function foo() { }
A.foo = foo;
})(A || (A = {}));
var A;
(function (A) {
function bar() {
A.foo();
}
})(A || (A = {}));

The problem of merging into one function is a potential name conflict between the same module in two files. But the compiler can report error in this case, and if two people are working independently on the same module in two files, it would be better to create two different sub modules. Merging into one function could be a feasible way support module level visibility.

As I write this article, I notice the /* @internal */ annotation in the ts compiler source code; it's an experimental option released with typescript 1.5.0-alpha to strip the declarations marked as @internal.

It helps to only include the declarations without @internal (which serves as your external APIs) when generating the .d.ts file from your code. And if your consumer are using TypeScript too, this prevents it from using your internal members.

Generating the .d.ts file for:

module A {
/* @internal */ export function internal() {}
export function external() {}
}

by

tsc -d --stripInternal A.ts

will output

declare module A {
function external(): void;
}

However, if your consumers use JavaScript, they can still use the internal function.

Conclusion
By and large, it's a pleasant and rewarding experience to move to TypeScript. Though it adds limitations on your JavaScript implementation, you can either find a good workaround or implement the benefits that outweigh it. Moreover, it's an active open source project (about 200 commits to master in last month) with well documentation to help you start easily. And just in March this year, Google also announced they would replace AtScript with TypeScript. Angular 2 is now built with TypeScript too. So far, the move to TypeScript has proved beneficial.

The post The Benefits of Migrating from JavaScript to TypeScript appeared first on Application Performance Monitoring Blog | AppDynamics.

More Stories By AppDynamics Blog

In high-production environments where release cycles are measured in hours or minutes — not days or weeks — there's little room for mistakes and no room for confusion. Everyone has to understand what's happening, in real time, and have the means to do whatever is necessary to keep applications up and running optimally.

DevOps is a high-stakes world, but done well, it delivers the agility and performance to significantly impact business competitiveness.

@CloudExpo Stories
Internet of Things (IoT) will be a hybrid ecosystem of diverse devices and sensors collaborating with operational and enterprise systems to create the next big application. In their session at @ThingsExpo, Bramh Gupta, founder and CEO of robomq.io, and Fred Yatzeck, principal architect leading product development at robomq.io, discussed how choosing the right middleware and integration strategy from the get-go will enable IoT solution developers to adapt and grow with the industry, while at th...
Contextual Analytics of various threat data provides a deeper understanding of a given threat and enables identification of unknown threat vectors. In his session at @ThingsExpo, David Dufour, Head of Security Architecture, IoT, Webroot, Inc., will discuss how through the use of Big Data analytics and deep data correlation across different threat types, it is possible to gain a better understanding of where, how and to what level of danger a malicious actor poses to an organization, and to det...
Most people haven’t heard the word, “gamification,” even though they probably, and perhaps unwittingly, participate in it every day. Gamification is “the process of adding games or game-like elements to something (as a task) so as to encourage participation.” Further, gamification is about bringing game mechanics – rules, constructs, processes, and methods – into the real world in an effort to engage people. In his session at @ThingsExpo, Robert Endo, owner and engagement manager of Intrepid D...
“In the past year we've seen a lot of stabilization of WebRTC. You can now use it in production with a far greater degree of certainty. A lot of the real developments in the past year have been in things like the data channel, which will enable a whole new type of application," explained Peter Dunkley, Technical Director at Acision, in this SYS-CON.tv interview at @ThingsExpo, held Nov 4–6, 2014, at the Santa Clara Convention Center in Santa Clara, CA.
The 6th International DevOps Summit, co-located with 18th International Cloud Expo – being held June 7-9, 2016, at the Javits Center in New York City – announces that its Call for Papers is open. Born out of proven success in agile development, cloud computing, and process automation, DevOps is a macro trend you cannot afford to miss. From showcase success stories from early adopters and web-scale businesses, DevOps is expanding to organizations of all sizes, including the world's largest enterp...
As interest in VDI grows among enterprises, many are finding its implementation more challenging than they anticipated. Successful desktop virtualization requires a powerful, secure, reliable infrastructure that delivers a seamless user experience. Private clouds that deliver a public cloud experience are emerging as a solution.
SYS-CON Events announced today that AgilData will exhibit at the 17th International CloudExpo®, which will take place on November 3–5, 2015, at the Santa Clara Convention Center in Santa Clara, CA. AgilData offers a seamlessly integrated best-of-breed solution for Big Data problems like streaming analytics, data pipeline orchestration, and batch processing. AgilData unifies proven open source technologies with a seamless developer and operations experience.
The revocation of Safe Harbor has radically affected data sovereignty strategy in the cloud. In his session at 17th Cloud Expo, Jeff Miller, Product Management at Cavirin Systems, will discuss how to assess these changes across your own cloud strategy, and how you can mitigate risks previously covered under the agreement.
DevOps Summit, taking place at the Santa Clara Convention Center in Santa Clara, CA, and Javits Center in New York City, is co-located with 17th Cloud Expo and will feature technical sessions from a rock star conference faculty and the leading industry players in the world. The widespread success of cloud computing is driving the DevOps revolution in enterprise IT. Now as never before, development teams must communicate and collaborate in a dynamic, 24/7/365 environment. There is no time to wait...
With all the incredible momentum behind the Internet of Things (IoT) industry, it is easy to forget that not a single CEO wakes up and wonders if “my IoT is broken.” What they wonder is if they are making the right decisions to do all they can to increase revenue, decrease costs, and improve customer experience – effectively the same challenges they have always had in growing their business. The exciting thing about the IoT industry is now these decisions can be better, faster, and smarter. Now ...
Discussions of cloud computing have evolved in recent years from a focus on specific types of cloud, to a world of hybrid cloud, and to a world dominated by the APIs that make today's multi-cloud environments and hybrid clouds possible. In this Power Panel at 17th Cloud Expo, moderated by Conference Chair Roger Strukhoff, panelists will address the importance of customers being able to use the specific technologies they need, through environments and ecosystems that expose their APIs to make t...
SYS-CON Events announced today that Cavirin will exhibit at the 17th International CloudExpo®, which will take place on November 3–5, 2015, at the Santa Clara Convention Center in Santa Clara, CA. Cavirin engineers security and compliance solutions to protect the elastic enterprise against destructive cyber threats. Headquartered in Santa Clara, CA, Cavirin technology provides comprehensive protection in both the datacenter and across multiple cloud instances and accounts. Global enterprise and...
Can call centers hang up the phones for good? Intuitive Solutions did. WebRTC enabled this contact center provider to eliminate antiquated telephony and desktop phone infrastructure with a pure web-based solution, allowing them to expand beyond brick-and-mortar confines to a home-based agent model. It also ensured scalability and better service for customers, including MUY! Companies, one of the country's largest franchise restaurant companies with 232 Pizza Hut locations. This is one example of...
Containers have changed the mind of IT in DevOps. They enable developers to work with dev, test, stage and production environments identically. Containers provide the right abstraction for microservices and many cloud platforms have integrated them into deployment pipelines. DevOps and containers together help companies achieve their business goals faster and more effectively. In his session at DevOps Summit, Ruslan Synytsky, CEO and Co-founder of Jelastic, will review the current landscape of...
SYS-CON Events announced today that Ericsson has been named “Silver Sponsor” of SYS-CON's 17th Cloud Expo, which will take place on November 3–5, 2015, at the Santa Clara Convention Center in Santa Clara, CA. Ericsson strives to connect everyone, wherever they may be. Because by being connected, people can take part in the emerging global collaboration that is the Networked Society – a society in which every person and every industry is empowered to reach their full potential.
SYS-CON Events announced today that Super Micro Computer, Inc., a global leader in high-performance, high-efficiency server, storage technology and green computing, will exhibit at the 17th International Cloud Expo®, which will take place on November 3–5, 2015, at the Santa Clara Convention Center in Santa Clara, CA. Supermicro (NASDAQ: SMCI), the leading innovator in high-performance, high-efficiency server technology is a premier provider of advanced server Building Block Solutions® for Data ...
We all know that data growth is exploding and storage budgets are shrinking. Instead of showing you charts on about how much data there is, in her session at 17th Cloud Expo, Barbara Murphy, Vice President of Marketing at HGST, will show you how to capture all of your data in one place. After you have your data under control, you can then analyze it in one place, saving time and resources. See how HGST has used these solutions to gain more value out of the information we have – and capitaliz...
Automating AWS environments is important for all businesses as it simplifies creation and setup of cloud resources, facilitates otherwise complex processes, and streamlines management. The benefits of automation are clear: accelerate execution, reduce human error and unwanted consequences, and increase the enterprise’s ability to rapidly adapt, all while reducing the overall cost of IT operations. In his session at 17th Cloud Expo, Patrick McClory, Director of Automation and DevOps at Datapipe...
Microservices are a very exciting architectural approach that many organizations are looking to as a way to accelerate innovation. Microservices promise to allow teams to move away from monolithic "ball of mud" systems, but the reality is that, in the vast majority of organizations, different projects and technologies will continue to be developed at different speeds. How to handle the dependencies between these disparate systems with different iteration cycles? Consider the "canoncial problem"...
Most everyone in Cloud IT circles has realized the power of containerization and that companies are adopting Docker containers at a remarkable rate. There are many good reasons for this, such as easily setting up dev/test scenarios (DevOps), and building out sophisticated, distributed computing clusters. But there are some deeper questions this talk will address from the Microsoft perspective. For example, what is the future of Windows in a containerized world? How will Windows and Linux work to...