TypeScript 类型声明
1. 基本类型
TypeScript 提供了几种基本类型:
布尔值(Boolean)
typescript
let isDone: boolean = false;
数字(Number)
typescript
let decimal: number = 6;
let hex: number = 0xf00d;
let binary: number = 0b1010;
let octal: number = 0o744;
字符串(String)
typescript
let color: string = "blue";
color = 'red';
数组(Array)
typescript
let list: number[] = [1, 2, 3];
let list: Array<number> = [1, 2, 3]; // 泛型语法
TIP
泛型的基本概念
泛型使得定义函数、接口或类时,可以处理各种类型,而不需要在定义时指定具体类型。通过使用泛型,可以在使用时传递具体的类型参数,从而达到类型的灵活性和复用性。
泛型的语法
<T>
是一个类型参数,它的名字可以是任意的(例如 <U>
, <V>
等等),但是常用的名字是 T,代表 Type。
元组(Tuple)
typescript
let x: [string, number];
x = ["hello", 10]; // OK
x = [10, "hello"]; // Error
枚举(Enum)
typescript
enum Color {Red, Green, Blue}
let c: Color = Color.Green;
Any
typescript
let notSure: any = 4;
notSure = "maybe a string instead";
notSure = false; // 也可以是布尔值
Void
typescript
function warnUser(): void {
console.log("This is my warning message");
}
Null 和 Undefined
typescript
let u: undefined = undefined;
let n: null = null;
Never
typescript
function error(message: string): never {
throw new Error(message);
}
Object
typescript
declare function create(o: object | null): void;
create({ prop: 0 }); // OK
create(null); // OK
create(42); // Error
create("string"); // Error
2. 类型断言
类型断言有两种形式:
typescript
let someValue: any = "this is a string";
let strLength: number = (<string>someValue).length;
// 或
let strLength: number = (someValue as string).length;
3. 接口(Interfaces)
接口是一种定义对象结构的方式:
typescript
interface LabelledValue {
label: string;
}
function printLabel(labelledObj: LabelledValue) {
console.log(labelledObj.label);
}
let myObj = {size: 10, label: "Size 10 Object"};
printLabel(myObj);
4. 函数类型
可以使用接口定义函数类型:
typescript
interface SearchFunc {
(source: string, subString: string): boolean;
}
let mySearch: SearchFunc;
mySearch = function(source: string, subString: string) {
let result = source.search(subString);
return result > -1;
}
5. 类(Classes)
TypeScript 支持基于类的面向对象编程:
typescript
class Greeter {
greeting: string;
constructor(message: string) {
this.greeting = message;
}
greet() {
return "Hello, " + this.greeting;
}
}
let greeter = new Greeter("world");
6. 泛型(Generics)
泛型允许创建可重用的组件:
typescript
function identity<T>(arg: T): T {
return arg;
}
let output = identity<string>("myString");
7. 高级类型
联合类型(Union Types)
typescript
function padLeft(value: string, padding: string | number) {
// ...
}
交叉类型(Intersection Types)
typescript
interface ErrorHandling {
success: boolean;
error?: { message: string };
}
interface ArtworksData {
artworks: { title: string }[];
}
type ArtworksResponse = ArtworksData & ErrorHandling;
类型别名(Type Aliases)
typescript
type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
结语
这个教程涵盖了 TypeScript 中最常用的类型概念。要深入了解 TypeScript,建议查阅官方文档和实践更多的编码示例。