刘勇虎的官方网站
网站内容包含大前端、服务器开发、Python开发、iOS开发、Android开发、网站维护等技术文章。专注于分享技术经验,职业心得体会,IT优秀文章与教程创作。
Stay hungry,Stay foolish,Stay young
const originLayout = ({
lookFor = [],
savedViews = [],
}: GroupSeniorLayoutParams = {}) => {
// 函数体
};
在这个例子中,lookFor
和 savedViews
都是可选参数,并且有默认值。这种方式可以避免在调用函数时必须传递所有参数,提高了代码的灵活性。
TypeScript 提供了一些实用的工具类型,可以帮助你在编写类型时更加灵活和方便。
Partial<Type>
interface User {
name: string;
age: number;
}
type PartialUser = Partial<User>; // { name?: string; age?: number; }
Partial<T>
将 T
中的所有属性变为可选。
Required<Type>
type RequiredUser = Required<PartialUser>; // { name: string; age: number; }
Required<T>
将 T
中的所有属性变为必填。
Readonly<Type>
type ReadonlyUser = Readonly<User>; // { readonly name: string; readonly age: number; }
Readonly<T>
将 T
中的所有属性变为只读。
Record<Keys, Type>
type Keys = 'a' | 'b' | 'c';
type Values = string;
type RecordExample = Record<Keys, Values>; // { a: string; b: string; c: string; }
Record<K, T>
创建一个对象类型,其键为 K
,值为 T
。
TypeScript 的类型推断机制非常强大,但在某些情况下可能会导致意外的结果。
let message = "Hello, World!";
// message 的类型被推断为 string
let message: string = "Hello, World!";
显式类型注解可以提高代码的可读性和可维护性。
接口主要用于描述对象的结构,可以被实现和继承。
interface User {
name: string;
age: number;
}
class Admin implements User {
name: string;
age: number;
role: string;
}
类型别名主要用于创建新的类型名称,不能被实现或继承。
type User = {
name: string;
age: number;
};
function greet(user: User) {
console.log(`Hello, ${user.name}!`);
}
let value: number = "123"; // Type 'string' is not assignable to type 'number'.
let value: string | number = "123";
value = 456; // 合法
value = true; // Type 'boolean' is not assignable to type 'string | number'.
type Admin = { role: string };
type User = { name: string };
type AdminUser = Admin & User;
const adminUser: AdminUser = {
role: "admin",
name: "John Doe"
};
转可选类型 - Partial
TypeScript 的类型系统非常强大,但也有一些常见的坑点需要注意。通过了解这些坑点和工具类型,可以更好地利用 TypeScript 编写健壮和可维护的代码。
希望这些内容对你有所帮助!如果有更多具体的问题或需要进一步补充的内容,请告诉我。