在同一天做多种语言的开发工作并不少见。
那个时候,我经常不知道怎么写,所以每次都是边研究边工作。
为了减少研究的时间,我想以个人备忘录的形式总结一下。
不应触碰的内容
索引.d.ts @types 界面更好还是打字更好? 如何编写JavaScript及基础知识 详细的逻辑和解释参考网站
https://www.typescriptlang.org/docs/ https://www.typescriptlang.org/ja/docs/ https://www.typescriptlang.org/cheatsheets基本用法
let 変数名 : 型 ; let 配列変数名 : 型 []; class クラス名 { 変数名 : 型 ; } const func = ( 引数名 : 引数型 ): 戻り値型 => { return 戻り値 ; };
限制处理的IN/OUT,内部使用
function hello ( name : string , helloAfterAction : ( name : string ) => number ) { console . log ( `hello ${ name } ` ); helloAfterAction ( name ); } // interfaceのように定義する type HogeInterface = ( hoge : string ) => number ; type FugaInterface = { ( hoge : string ): number ; }; function hogee ( name ; string , hogeAction : HogeInterface ) { console . log ( `hogee ${ name } ` ); hogeAction ( name ); }
甲或乙
联合类型
let hoge : A | B ;
数组的内容是 A 或 B
let hoge : ( A | B )[];
一个或没有值(未定义)
可选的
class Hoge { hoge ?: A ; } class Fuga { hoge : A | undefined ; } // A or undefined だけど、明示的な値定義を強制する class Piyo { hoge ?: A | undefined ; }
默认值设置
function hello ( name ?: string ) { name ??= ' ほげ ' ; } function hello ( name : string = " ほげ " ) { }
即使没有值(null 或 undefined)也可以安全使用
可选链
空合并运算符
let hoge : undefined ; let typeVal : string | undefined = hoge ?. title ?. type ; let typeNumber : number = typeVal ?. indexOf ( " ほ " ) ?? 0 ;
什么是A和B
交叉口类型
type Hoge = A & B ; function extend < A , B > ( first : A , second : B ): A & B { return { ... first , ... second }; }
* 如果创建了无法识别的类型,则将其视为 never 类型。
使用时确定的具体类型
仿制药
function hello < T > ( arg : T ): string { return `hello ${ arg } !` ; } class Hoge < T > { private name : string ; private hoge : T ; constructor ( name : string , hoge : T ) { this . name = name ; this . hoge = hoge ; } } // 利用時 hello < string > ( " hoge " ); new Hoge < number > ( " hoge " , 1 );
如何定义类型
做一个模具
type Hoge = { name : string ; };
使用实体创建类型
class Hoge { hoge : string ; }
创建可以强制行为的类型
interface Hoge { hoge : string ; }
限制可用的值
只接受“hoge”或“fuga”
文字类型
const hello = ( name : " hoge " | " fuga " ) => { console . log ( `hello ${ name } ` ); };
* string , number , boolean 可以限制为实际可以使用的值
仅接受固定值
枚举
enum Username { Hoge = " hoge " , Fuga = " fuga " , } namespace Username { /** Username.hello(Username.Hoge); ができるようになる */ export function hello ( name : Username ): string { return `hello ${ name } ` ; } }
* 类似枚举的接口
interface ValueType ; const Enum = { key : { ... } as ValueType , } as const ; type Enum = typeof Enum [ keyof typeof Enum ];
* 可以像枚举一样使用,也可以定义为字符串
function stringToEnum < T extends string > ( o : T []): { [ K in T ]: K } { return o . reduce (( accumulator , currentValue ) => { accumulator [ currentValue ] = currentValue ; return accumulator ; }, Object . create ( null )); } const Hoge = stringToEnum ([ " hoge " , " fuga " ]); type Hoge = keyof typeof Hoge ;
* https://basarat.gitbook.io/typescript/type-system/literal-types#string-based-enums 引用
接受相同类型的倍数
可变长度参数/剩余参数
function hello ( name : string , ... greetedName : string []) { }
类型确定方法
在原始级别检查
let isString : boolean = typeof "" === ' string ' ;
细绳 | '细绳' |
布尔值 | '布尔' |
数值 | '数字' |
不明确的 | '不明确的' |
无效的 | '目的' |
大整数 | '大神' |
功能 | '功能' |
象征 | '象征' |
其他 | '目的' |
粗略检查继承关系
let val : Hoge = ...; let isHoge : boolean = val instanceof Hoge ; let isNotHoge : boolean = ! ( val instanceof Hoge );
属性存在检查
let hasName : boolean = ' name ' in val ;
检查过程后确定类型并使用
class Hoge { static isType ( arg : any ): arg as Hoge { let isNotNullObj : boolean = ( arg === ' object ' && arg !== null ); return isNotNullObj && typeof ( arg as Hoge ). name === ' string ' ; }; } let val = ...; if ( Hoge . isType ( val )) { // このスコープ内では、val を Hoge として扱うことができる }
用于交换数据的类型
在类中定义
class Hoge { hoge : string ; constructor ( init ?: Partial < Hoge > ) { Object . assign ( this , init ); } } (() => { let hoge : Hoge = new Hoge ({ hoge : " fuga " }); })();
在接口中定义
interface Hoge { hoge : string ; } (() => { let hoge : Hoge = { hoge : " fuga " }; })();
定义在一次性的前提下
内联类型注解
(() => { let hoge : { hoge : string ; } = { hoge : " fuga " }; })();
多种返回类型(使用数组)
元组
let [ id , name , type ]: [ string , number , string ] = (( val : string ): [ string , number , string ] => { return [ 0 , " hoge " , " fuga " ]; })( "" );
多种返回类型
解构
let { id , name , type } = (( val : string ): { id : number , name : string , type : string } => { return { id : 0 , name : " hoge " , type : " fuga " , }; })( "" );
在最后
有很多场景,当你有一定的经验时,你会忘记基本的部分。可以轻松检查,但我想尽可能缩短时间。
有可能会增加新的符号,所以这次总结的内容中可能存在一些不充分的部分。
如果您能告诉我是否有短缺或其他好的定义方法,我将不胜感激。
原创声明:本文系作者授权爱码网发表,未经许可,不得转载;
原文地址:https://www.likecs.com/show-308632574.html
查看更多关于回忆 TypeScript 类型定义的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did223365