summaryrefslogtreecommitdiffhomepage
path: root/typescript.html.markdown
diff options
context:
space:
mode:
Diffstat (limited to 'typescript.html.markdown')
-rw-r--r--typescript.html.markdown41
1 files changed, 34 insertions, 7 deletions
diff --git a/typescript.html.markdown b/typescript.html.markdown
index cf2111d5..64f5ca5b 100644
--- a/typescript.html.markdown
+++ b/typescript.html.markdown
@@ -2,6 +2,7 @@
language: TypeScript
contributors:
- ["Philippe Vlérick", "https://github.com/pvlerick"]
+ - ["Kiwimoe", "https://github.com/kiwimoe"]
filename: learntypescript.ts
---
@@ -16,7 +17,7 @@ This article will focus only on TypeScript extra syntax, as opposed to
[JavaScript](/docs/javascript).
To test TypeScript's compiler, head to the
-[Playground] (http://www.typescriptlang.org/Playground) where you will be able
+[Playground](https://www.typescriptlang.org/play) where you will be able
to type code, have auto completion and directly see the emitted JavaScript.
```ts
@@ -48,6 +49,7 @@ let list: Array<number> = [1, 2, 3];
// For enumerations:
enum Color { Red, Green, Blue };
let c: Color = Color.Green;
+console.log(Color[c]); // "Green"
// Lastly, "void" is used in the special case of a function returning nothing
function bigHorribleAlert(): void {
@@ -114,7 +116,7 @@ class Point {
}
// Functions
- dist() { return Math.sqrt(this.x * this.x + this.y * this.y); }
+ dist(): number { return Math.sqrt(this.x * this.x + this.y * this.y); }
// Static members
static origin = new Point(0, 0);
@@ -137,7 +139,7 @@ class Point3D extends Point {
}
// Overwrite
- dist() {
+ dist(): number {
let d = super.dist();
return Math.sqrt(d * d + this.z * this.z);
}
@@ -199,7 +201,7 @@ interface Person {
}
var p1: Person = { name: "Tyrone", age: 42 };
-p1.age = 25; // Error, p1.x is read-only
+p1.age = 25; // Error, p1.age is read-only
var p2 = { name: "John", age: 60 };
var p3: Person = p2; // Ok, read-only alias for p2
@@ -237,6 +239,16 @@ if (state.type === "success") {
console.error(state.message);
}
+// Template Literal Types
+// Use to create complex string types
+type OrderSize = "regular" | "large";
+type OrderItem = "Espresso" | "Cappuccino";
+type Order = `A ${OrderSize} ${OrderItem}`;
+
+let order1: Order = "A regular Cappuccino";
+let order2: Order = "A large Espresso";
+let order3: Order = "A small Espresso"; // Error
+
// Iterators and Generators
// for..of statement
@@ -257,14 +269,29 @@ for (const i in list) {
console.log(i); // 0, 1, 2
}
+// Type Assertion
+
+let foo = {} // Creating foo as an empty object
+foo.bar = 123 // Error: property 'bar' does not exist on `{}`
+foo.baz = 'hello world' // Error: property 'baz' does not exist on `{}`
+// Because the inferred type of foo is `{}` (an object with 0 properties), you
+// are not allowed to add bar and baz to it. However with type assertion,
+// the following will pass:
+
+interface Foo {
+ bar: number;
+ baz: string;
+}
+let foo = {} as Foo; // Type assertion here
+foo.bar = 123;
+foo.baz = 'hello world'
```
## Further Reading
* [TypeScript Official website] (http://www.typescriptlang.org/)
- * [TypeScript language specifications] (https://github.com/Microsoft/TypeScript/blob/master/doc/spec.md)
- * [Anders Hejlsberg - Introducing TypeScript on Channel 9] (http://channel9.msdn.com/posts/Anders-Hejlsberg-Introducing-TypeScript)
+ * [TypeScript language specifications] (https://github.com/microsoft/TypeScript/blob/main/doc/spec-ARCHIVED.md)
+ * [Learn TypeScript] (https://learntypescript.dev/)
* [Source Code on GitHub] (https://github.com/Microsoft/TypeScript)
- * [Definitely Typed - repository for type definitions] (http://definitelytyped.org/)