TypeScript

Typed JavaScript at Any Scale

TypeScript extends JavaScript by adding types.

By understanding JavaScript, TypeScript saves you time catching errors and providing fixes before you run code.

Any browser, any OS, anywhere JavaScript runs. Entirely Open Source.

TypeScript

TypeScript

Anders Hejlsberg

TypeScript

Anders Hejlsberg

  • Turbo Pascal

TypeScript

Anders Hejlsberg

  • Turbo Pascal
  • Delphi

TypeScript

Anders Hejlsberg

  • Turbo Pascal
  • Delphi
  • C# & .NET

TypeScript

Anders Hejlsberg

  • Turbo Pascal
  • Delphi
  • C# & .NET
  • TypeScript

TypeScript

它仍然是动态类型语言

兼容Javascript

基本语法

编译时检查

更好的重构支持

语言优势

类型声明文件

配置文件

鸭子类型

类型推断

泛型

工具类

类型系统

更好的社区支持

字面类型

TypeScript文化

历史 

设计哲学

TypeScript

TypeScript文化

历史

TypeScript

TypeScript文化

历史

  • MicroSoft JScript / JScript.NET
  • 2012年发布第一个TypeScript公开版本 0.8
  • 2013年发布0.9,支持泛型
  • 2014年发布1.0,宣布GA,可以在生产环境中使用

设计哲学

TypeScript

TypeScript文化

历史

  • 2012年发布第一个公开版本 0.8
  • 2013年发布0.9,支持泛型
  • 2014年发布1.0,宣布GA,可以在生产环境中使用

设计哲学

  • 尽可能保持和JavaScript的兼容
  • 仅在类型检查方面进行增强
  • 其它语法方面的增强通过参与ECMAScript标准组织推动

TypeScript

它仍然是动态类型语言

兼容Javascript 

基本语法

编译时检查

更好的重构支持

语言优势

类型声明文件

配置文件

鸭子类型

类型推断

泛型

工具类

类型系统

更好的社区支持

字面类型

TypeScript文化

历史 

设计哲学

TypeScript

基本语法

兼容Javascript

TypeScript

基本语法

兼容Javascript

  • 修改扩展名 JS ➜ TS
  • 类型声明不是必须的
const name: string = 'Colin Han'

类型推断

TypeScript

基本语法

const name = "Colin Han";   // name: string
const age = 18;             // age: number
const isAdult = (age > 18); // isAdult: boolean
let a = getVideoList(age);     // a: string]]

function getVideoList(age) {   // getVideoList: (number) => string[]
  if (age > 18) {
  	return ['video1', 'video2'];
  } else {
    return [];
  }
}

兼容Javascript

类型推断

鸭子类型

TypeScript

基本语法

interface Duck {
  walk(): void;
  quack(): void;
}

function roastDuck(duck: Duck) { /* ... */ }

const chick = {
  walk: () => { /* */ },
  quack: () => { /* */ }
}

const pig = { walk: () => { /* */ } }

roastDuck(chick); // 👏 Correct
roastDuck(pig);   // 😭 Wrong

类型推断

鸭子类型

配置文件

TypeScript

基本语法

// tsconfig.js
{
  "compilerOptions": {
    "target": "es5",
    "lib": [
      "dom",
      "dom.iterable",
      "esnext"
    ],
    "allowJs": true,
    "skipLibCheck": true,
    "strict": false,
    "forceConsistentCasingInFileNames": true,
    "noEmit": true,
    "esModuleInterop": true,
    "module": "esnext",
    "moduleResolution": "node",
    "resolveJsonModule": true,
    "isolatedModules": true,
    "jsx": "preserve"
  },
  "exclude": [
    "node_modules"
  ],
  "include": [
    "next-env.d.ts",
    "**/*.ts",
    "**/*.tsx"
  ]
}

类型推断

鸭子类型

配置文件

TypeScript

它仍然是动态类型语言

兼容Javascript 

基本语法

编译时检查

更好的重构支持

语言优势

类型声明文件

配置文件

鸭子类型

类型推断

泛型

工具类

类型系统

更好的社区支持

字面类型

TypeScript文化

历史

设计哲学

TypeScript

类型系统

字面量类型

TypeScript

类型系统

字面量类型

let e: 'birds' | 'animals';

e = 'birds';           // 👏 Correct
e = 'duck';            // 😭 Wrong

let n: 1 | 2 | 3;

n = 1;                 // 👏 Correct
n = 4;                 // 😭 Wrong

let nullable: string | undefined;
nullable = undefined;  // 👏 Correct

let tuple: [string, number];
tuple = ['abc', 10];   // 👏 Correct
tuple = [ 1, 2 ];      // 😭 Wrong

泛型

TypeScript

类型系统

interface DefaultResult {
  foo: string;
}

interface FetchResult<T extends DefaultResult = DefaultResult> {
  success: boolean;
  data: T;
}

let r1: FetchResult;

r1 = { success: true, data: { foo: 'abc' }};             // 👏 Correct
r1 = { success: false, data: 123 };                      // 😭 Wrong

let r2: FetchResult<{ foo: string, bar: string }>;

r2 = { success: true, data: { foo: 'abc', bar: 'def' }}; // 👏 Correct
r2 = { success: true, data: { foo: 'abc' }};             // 😭 Wrong

字面量类型

泛型

只读属性

TypeScript

类型系统

interface A {
  foo: string;
}

interface ReadonlyA {
  readonly foo: string;
}

const r1: A = { foo: 'abc' };
r1.foo = 'ddd'; // 👏 Correct


const r2: ReadonlyA = { foo: 'abc' };
r2.foo = 'ddd'; // 😭 Wrong

const r3 = Readonly<A> = { foo: 'abc' };
r3.foo = 'ddd'; // 😭 Wrong

const r4 = Mutable<ReadonlyA> = { foo: 'abc' };
r4.foo = 'ddd'; // 👏 Correct

工具类

泛型

只读属性

TypeScript

类型系统

type Types = 'type1' | 'type2' | 'type3';

interface Data {
  foo: string;
}

// Record<Keys,Type>
const r: Record<Types, Data | undefined> = {};
r.type1 = { foo: 'abc' };   // 👏 Correct
r.type2 = { bar: 'def' };   // 😭 Wrong
r.another = { foo: 'abc' }; // 😭 Wrong

// Pick<Type, Keys>
const p: Pick<Record<Types, Data | undefined>, 'type1' | 'type2'> = {};
p.type3 = { foo: 'abc' };   // 😭 Wrong

// ReturnType<Type>
const r2: ReturnType<() => string>; // r2: string;

// Parameters<Type>
const p2: Parameters<(foo: string) => void>; // p2: [string];

工具类

只读属性

TypeScript

它仍然是动态类型语言

兼容Javascript 

基本语法

编译时检查

更好的重构支持

语言优势

类型声明文件

配置文件

鸭子类型

类型推断

泛型

工具类

类型系统

更好的社区支持

字面类型

TypeScript文化

历史

设计哲学

Typescript

By Colin Han