TypeScript常见用法
const a: boolean = true;
const b: number = 1;
const c: string = "s";
const d: undefined = undefined;
const e: null = null;
const f: number = 1;
const g: object = {};
const h: any = "any type";
let list: number[] = [1, 2, 3];
let x: [string, number, boolean];
x = ["hello", 10, false];
function warnUser(): void {}
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;
let someValue2: any = "this is a string";
let strLength2: number = (someValue as string).length;
let gender: "男" | "女";
gender = "女";
enum Color {
Red,
Green,
Blue,
}
let color: Color = Color.Green;
type Gender = "男" | "女";
type User = {
name: string;
age: number;
gender: Gender;
};
let u: User;
u = {
name: "sdfd",
gender: "男",
age: 34,
};
function combine(a: string, b: string): string;
function combine(a: number, b: number): number;
function combine(a: number | string, b: number | string): number | string {
if (typeof a === "number" && typeof b === "number") {
return a * b;
} else if (typeof a === "string" && typeof b === "string") {
return a + b;
}
throw new Error("a和b必须是相同的类型");
}
const result = combine("1", "2");
const result2 = combine(1, 2);
interface User2 {
name: string;
age: number;
sayHello(): void;
}
const user: User2 = {
name: "fx",
age: 28,
sayHello() {},
};
let Log = console.log;
let arsg1: boolean = true;
let args2: number = 110;
let args3: string = "hello, ts";
let args4: null = null;
let args5: undefined = undefined;
let args6: void = undefined;
let args7: any = "any";
let args8: any[] = [1, "2", true, null, Symbol("fux"), undefined, { a: "a" }];
let grgs8_1: Array<any> = [
1,
"2",
true,
null,
Symbol("fux"),
undefined,
{ a: "a" },
];
let args9 = "seven";
let args10;
args10 = "F";
args10 = 123;
let args11: string | number | boolean;
args11 = 11;
args11 = "33";
args11 = true;
let args12: any[] = [1, 2, "3", true, Symbol("fux"), new Date(), [1, 1, 1]];
let args13: Array<number> = [1, 2, 3];
function getLength(something: string | number): string {
return something.toString();
}
interface Person {
readonly id: number;
name: string;
[props: string]: any;
}
let obj1: Person = {
id: 2,
name: "fx",
age: 22,
height: "170cm",
weight: "80kg",
};
let args14: Array<Person> = [obj1];
function fun1(x: number, y: number): number {
return x + y;
}
let fun2 = function (x: number, y: number): number {
return x + y;
};
const add = (x: number, y: number, z?: number): number => {
if (typeof z === "number") {
return x + y + z;
}
return x + y;
};
const add2: (x: number, y: number, z?: number) => number = add;
interface ISum {
(x: number, y: number, z?: number): number;
}
const add3: ISum = add;
function echo<T>(arg: T): T {
console.log(arg);
return arg;
}
let res = echo(12);
function echo2<T>(arg: T[]): T[] {
console.log(arg.length);
return arg;
}
let res2 = echo<Array<number>>([1, 2, 3]);
interface IEeho {
length: number;
}
function echo3<T extends IEeho>(arg: T): T {
console.log(arg.length);
return arg;
}
let res3 = echo({ length: 10 });
interface SearchFn {
(data: string[], keyword: string): boolean;
}
let mySearch: SearchFn = function (data: string[], keyword: string) {
return data.filter((l) => l === keyword).length > 0;
};
function buildStr(fistStr: string = "fux", str2?: string[], str3?: string) {
let append = fistStr;
if (str2) {
str2.map((l) => (append += l));
}
if (str3) {
append += str3;
}
return append;
}
function buildStr2(fistStr: string = "fux", ...arr: any[]) {
let append = fistStr;
arr.forEach((element) => {
append += element;
});
return append;
}
function reverse(x: number): number;
function reverse(x: string): string;
function reverse(x: number | string): number | string | void {
if (typeof x === "number") {
return Number(x.toString().split("").reverse().join(""));
} else if (typeof x === "string") {
return x.split("").reverse().join("");
}
}
type Name = string;
type NameResolver = () => string;
type NameOrResolver = Name | NameResolver;
function getName(n: NameOrResolver): Name {
if (typeof n === "string") {
return n;
} else {
return n();
}
}
getName("1");
getName(() => "2");
interface IName {
name: string;
}
type IPerson = IName & { age: number };
let fux: IPerson = {
name: "fux",
age: 12,
};
type Dirctions = "Up" | "Right" | "Down" | "Left";
let toWhere: Dirctions = "Down";
type EventNames = "click" | "scroll" | "mousemove";
function handleEvent(ele: Element, event: EventNames) {
}
handleEvent(document.getElementById("hello") as Element, "scroll");
let tom: [string, number, boolean] = ["Tom", 25, false];
function createArray<T>(length: number, value: T): Array<T> {
let result: T[] = [];
for (let i = 0; i < length; i++) {
result[i] = value;
}
return result;
}
createArray<number>(3, 1);
createArray(3, "xxx");
function swap<T, U>(tuple: [T, U]): [U, T] {
return [tuple[1], tuple[0]];
}
swap<number, string>([7, "seven"]);
swap([7, 7]);
function copyFields<T extends U, U>(target: T, source: U): T {
for (let id in source) {
target[id] = (<T>source)[id];
}
return target;
}
let x = { a: 1, b: 2, c: 3, d: 4 };
copyFields(x, { b: 10, d: 20, c: 11 });