!
非空断言 ,强调某个属性一定存在,或某个值一定非空
name!: string
this.formRef.current!.setFieldsValue({ note: 'Hi there!' });
www.typescriptlang.org/docs/handbo…
Pick
export type Store = AppStore<Pick<RootState, 'app'>> & SettingStore<Pick<RootState, 'settings'>>
& PermissionStore<Pick<RootState, 'permission'>> & UserStore<Pick<RootState, 'user'>>
& TagsStore<Pick<RootState, 'tagViews'>>
// 原始类型
interface TState {
name: string;
age: number;
like: string[];
}
// 如果我只想要name和age怎么办,最粗暴的就是直接再定义一个(我之前就是这么搞得)
interface TSingleState {
name: string;
age: number;
}
// 这样的弊端是什么?就是在Tstate发生改变的时候,TSingleState并不会跟着一起改变,所以应该这么写
interface TSingleState extends Pick<TState, "name" | "age"> {};
函数类型中参数的获取
以此为例子:
type IFoo = (name: string, age: number) => { name: string, age: number, gender: string }
获取函数的参数类型:
type IBar = Parameters<IFoo>
// IBar = [string, number]
获取函数的返回类型:
type IBar = ReturnType<IFoo>
// IBar = {name: string, age: number, gender: string}
interface Map<T> {
[key: string]: T;
}
let keys: keyof Map<number>;//string
let value: Map<number>['antzone']; //number
vue3 route meta
/**
* Construct a type with a set of properties K of type T
*/
type Record<K extends keyof any, T> = {
[P in K]: T;
};
// ==
/**
* Interface to type `meta` fields in route records.
*/
export declare interface RouteMeta extends Record<string | number | symbol, any> {
}
export declare interface _RouteRecordBase extends PathParserOptions {
...
/**
* Arbitrary data attached to the record.
*/
meta?: RouteMeta;
...
}
?? 非空运算符
如果第一个参数不是 null/undefined( 这里只有两个假值,但是 JS 中假值包含:未定义 undefined、空对象 null、数值 0、空数字 NaN、布尔 false,空字符串'' ),将返回第一个参数,否则返回第二个参数