TypeScript 中定义类型的两种方式:
接口(interface)和 类型别名(type alias)。
type Point = {
x: number;
y: number;
};
type SetPoint = (x: number, y: number) => void;
interface Point {
x: number;
y: number;
}
interface SetPoint {
(x: number, y: number): void;
}
interface SetPoint {
(x: number, y: number): void;
}
typeof 操作符可以用来获取一个变量或对象的类型。
const defaultOption = {
timeout: 500
}
type Opt = typeof defaultOption
keyof
keyof 与 Object.keys 略有相似,只不过 keyof 取 interface 的键。
避免使用any
function get<T extends object, K extends keyof T>(o: T, name: K): T[K] {
return o[name]
}
查找类型
interface Person {
addr: {
city: string,
street: string,
num: number,
}
}
const addr: Person["addr"] = {
city: 'string',
street: 'string',
num: 2
}
泛型
interface API {
'/user': { name: string },
'/menu': { foods: string[] }
}
const get = <URL extends keyof API>(url: URL): Promise<API[URL]> => {
return fetch(url).then(res => res.json());
}
get('');
get('/menu').then(user => user.foods);