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 范围太宽,{}定义空,对象就用object
let list: any = 'xcatliu'; //any 可以是任意值

type

type 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 = [];
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 = [];
开始的时候我对数组对象的定义为
let arr2: Array = [];
这种方式是错的,正确方法如下

interface IPerson{
    id?:string;
    name:string;
    age:number;
}
const persons:Array =[
    {name:"john",age:12},
    {name:"ben",age:20},
]
const fun=(info:Array)=>{
    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) => number
const 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
另外,语句不通,写的不对的地方,尽管提,心情不好,觉得没用,想骂人的也可以回复,
以上

你可能感兴趣的:(typescript)