深入理解 TypeScript

363 阅读1分钟

jkchao.github.io/typescript-…

!

非空断言 ,强调某个属性一定存在,或某个值一定非空

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> {

  [keystring]: 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,空字符串'' ),将返回第一个参数,否则返回第二个参数

Foo | Bar , Foo & Bar 区别

blog.csdn.net/azl39798585…