在使用 Angular 做项目的时候,对 TypeScript 的类型判断不太熟练,为了方便查找,特意对 TypeScript 的类型判断做了简单梳理。文章只是 TS 官网的内容摘要,没有高深的知识,想要深入学习 TS 还要看官网文档。

基础类型

// 布尔值
let isDone: boolean = false; // 数字
let decLiteral: number = 6;
let hexLiteral: number = 0xf00d;
let binaryLiteral: number = 0b1010;
let octalLiteral: number = 0o744; // 字符串
let name: string = "bob";
name = "smith"; // 数组
let list: number[] = [1, 2, 3];
// 数组泛型
let list: Array<number> = [1, 2, 3]; //元组 Tuple
let x: [string, number];
x = ['hello', 10]; // OK
x = [10, 'hello']; // Error // 枚举
enum Color {Red, Green, Blue}
let c: Color = Color.Green; // Any
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // okay, definitely a boolean // Void
function warnUser(): void {
alert("This is my warning message");
} // Null 和 Undefined
let u: undefined = undefined;
let n: null = null; // Never
function error(message: string): never {
throw new Error(message);
} function fail() {
return error("Something failed");
} function infiniteLoop(): never {
while (true) {
}
}

类型断言

类型断言好比其它语言里的类型转换,但是不进行特殊的数据检查和解构。 它没有运行时的影响,只是在编译阶段起作用。

let someValue: any = "this is a string";
// “尖括号”语法
let strLength: number = (<string>someValue).length;
// as语法
let strLength: number = (someValue as string).length;

接口

TypeScript 的核心原则之一是对值所具有的结构进行类型检查。 它有时被称做“鸭式辨型法”或“结构性子类型化”。 在 TypeScript 里,接口的作用就是为这些类型命名和为你的代码或第三方代码定义契约。

interface LabelledValue {
label: string;
} // 可选属性
interface SquareConfig {
color?: string;
width?: number;
} // 只读属性
interface Point {
readonly x: number;
readonly y: number;
} // 函数类型
interface SearchFunc {
(source: string, subString: string): boolean;
} // 可索引的类型
interface StringArray {
[index: number]: string;
} // 类类型
interface ClockInterface {
currentTime: Date;
}

泛型

我们把这个版本的 identity 函数叫做泛型,因为它可以适用于多个类型。 不同于使用 any,它不会丢失信息,像第一个例子那像保持准确性,传入数值类型并返回数值类型。

function identity<T>(arg: T): T {
return arg;
}

最新文章

  1. IL接口和类的属性
  2. Dubbo架构设计详解
  3. c 语言结构体的三种定义方式
  4. SQL server while语句、存储过程
  5. 常州培训 day4 解题报告
  6. AS:加载新版本的SWF文件。
  7. C#读写者线程(用AutoResetEvent实现同步)
  8. (转载) VS编译duilib项目时候的错误解决方法整理
  9. 前端自动化构建工具 Gulp 使用
  10. 如何把一个表中的部分字段值插入到另一个表中去 这sql吊
  11. mysql,oracle,sqlserver使用jdbc连接数据库总结
  12. Spring之旅第一篇-初识Spring
  13. Application、QueryString、session、cookie、ViewState、Server.Transfer等
  14. UVA1646-Edge Case(递推+斐波那契数列)
  15. Runtime 自动化归档
  16. swift - 启动APP 黑屏
  17. 用HackRF和Gqrx来听FM广播
  18. C#解除文件锁定
  19. C/C++之标准库和标准模板库
  20. 嵌入式开发之davinci--- ccs 编译lib库

热门文章

  1. 【STM32H7教程】第3章 STM32H7整体把控
  2. Ubuntu16 Nginx的安装与基本配置
  3. 探索js原型链和vue构造函数中的奥妙
  4. Java进阶篇设计模式之二 ----- 工厂模式
  5. 如何利用HTTP缓存来加快你的网站应用
  6. WCF优雅使用 KnownType标记的方法
  7. EF时,数据库字段和实体类不一致问题
  8. java反序列化漏洞实战
  9. Python绘图与可视化
  10. Python数据描述与分析