关于typescript:typescript
typescipt敌人举荐的一篇文,题目为“为什么你的前端工作教训不值钱?”,看后的感觉是,如果你是一个前端,这篇文你肯定要看。地址如下 :http://mt.sohu.com/20170307/n482544235.shtml作者是一个面试官,首先提出一个问题:编写一个javscript函数 fn,该函数有一个参数 n(数字类型),其返回值是一个数组,该数组内是 n 个随机且不反复的整数,且整数取值范畴是 [2, 32]。他一步步的列出了本人会考核的点,顺次为:1.可用 (代码是能达到预期成果的)2.强壮 对输出的n值进行较验 包含是否存在校验,类型是否为数值,范畴校验,以及校验代码是否能失常运行3.牢靠 对返回值进行校验 代码出错时返回什么,返加的后果是否是预期的,预期之外的后果返回什么4.宽容 对其它异常情况的思考, 4.1 当n带有小数时 4.2 当n是一个字符串时 (与2重合了,相当于类型判断 ) 4.3 是否有正文 4.4 [2, 32]范畴调整时,代码是否能疾速适应这篇文是18年看到的,长期在各个小公司工作,面试工作时,遇到好多面试官会问根底的货色,很屡次经验会让本人感觉,问那么多有什么用,写代码时不还是增删改查这些,直到看了这篇文之后,发现工作的思路上还是要有所提高。这篇文给了我一个全新的视角,也帮我了解了早些年看一些前端书,为什么js代码前会有if 判断。以我的教训来看,写函数时,都该当留神和了解两件事,1.输出是什么,输入是什么?2.要对输出和输入进行判断在理论工作中,对输入输出的判断,该当做,但同时属于减少工时,产出却并不可观typescript 就是解决这个问题的,用: 指定变量的类型,类型不对,编绎报错所有对ts的争吵都能够总结为 ts带来的额定工作量和它能带来的益处,你更看重哪个?引言: 指定变量的类型 ts的用途绝对于js,就是加一个冒号,冒号后接用于限定参数类型ts的作用是对类型进行定义,根本类型之外,有api,有应用规定,能够了解为,‘用于判断类型的正则’ |取并集,满足其中一个即可?表明该变量可有可无any 能够是任意类型type 和 interface 是罕用,根本的api 定义根本类型number / string / boolean / null / undefined/object的定义 (还有 symbol和bigint,不罕用) const name: string = 'xuziling';const age: number = 24;const male: boolean = false;const undef: undefined = undefined;const nul: null = null;const obj: object = { name, age, male }; // Object 范畴太宽,{}定义空,对象就用objectlet list: any = 'xcatliu'; //any 能够是任意值typetype Code = 10000 | 10001 | 50000; //只能是这三个值中的一个type Status = "success" | "failure"; //只能是这两个值中的一个type Name = string; //Name当初是string的别名,以下两种成果雷同const name: string = 'xuziling';const name: Name = 'xuziling';type NameResolver = () => string; //一个返回字符串的函数type NameOrResolver = Name | NameResolver; //能够是一个字符串,也能够是一个返回字符串的函数定义数组const arr1: string[] = [];const arr2: Array<string> = [];const arr5:[string,number,boolean]=['123',123,false] // 元组 固定长度和固定类型const arr5:[string,number?,boolean?]=['123',123,false] //可有可无的写法(能够没有,然而有必须合乎类型要求)let list: any[] = ['xcatliu', 25, { website: 'http://xcatliu.com' }]; //任意类型数组interface定义interface NumberArray { [index: number]: number;}let arr:NumberArray=[1,2,3]定义数组对象数组的定义形式为const arr2: Array<string> = [];开始的时候我对数组对象的定义为let arr2: Array<object> = [];这种形式是错的,正确办法如下interface IPerson{ id?:string; name:string; age:number;}const persons:Array<IPerson> =[ {name:"john",age:12}, {name:"ben",age:20},]const fun=(info:Array<IPerson>)=>{ console.log(info[0].name)}fun(persons)要把对象的构造定义为一个 interface定义对象 && interface新知识点 interface,能够了解为对对象构造的形容interface IDescription { name: string; age: number; male: boolean;}const obj1: IDescription = { name: 'linbudu', age: 599, male: true,};当对象的属性值可能是多个类型时,写作 number | string当对象的属性可能存在时,写作 gender?:string实例如下interface Person { name: string; age: number | string; gender?:string}let tom: Person = { name: 'Tom', age: '25', gender: 'male'};当后端传过来的字段是前端用不到时,有超出预期的key值时,写作 [propName: string]: string | number;interface Person { name: string; age: number | string; [propName: string]: string | number;} 1.[propName: string]: string | number; 必须能蕴含所有其它类型,它是其它类型的父集,或者说并集, 2.propName能够写成其它的,不是固定的 3.即使有多个多余的key [propName: string]: string | number; 写一个就行,定义函数ts 对函数的定义,要求表明入参和出参的类型,如下 入参name是string型,出参是number型function foo(name: string): number { return name.length;}// 形式一const foo = (name: string): number => { return name.length}// 形式二 定义了输入输出的类型// 要了解一下, (name: string) => number 整段是ts语法,意为,入参name是string型,出参是number型const foo: (name: string) => number = (name) => { return name.length}形式三 type定义type FuncFoo = (name: string) => numberconst foo: FuncFoo = (name) => { return name.length}形式四 interface 定义interface SearchFunc { (source: string, subString: string): boolean;}let mySearch: SearchFunc;mySearch = function(source: string, subString: string) { return source.search(subString) !== -1;}就我集体来看,ts有适度应用的嫌疑,仅就函数的输入输出能够加ts,其它中央加意义不大。又或者,思虑比拟成熟,能对输入输出进行良好的判断,也没有应用的必要,只写本人感觉重要的中央,细则大家要看下文档,没有写的点 包含但不限于:枚举 ,对象static/readonly,泛型,断言,declare。能够查文档,https://ts.xcatliu.com/introduction/what-is-typescript.html另外,语句不通,写的不对的中央,只管提,情绪不好,感觉没用,想骂人的也能够回复,以上