亚洲 国产精品 日韩-亚洲 激情-亚洲 欧美 91-亚洲 欧美 成人日韩-青青青草视频在线观看-青青青草影院

千鋒教育-做有情懷、有良心、有品質的職業教育機構

手機站
千鋒教育

千鋒學習站 | 隨時隨地免費學

千鋒教育

掃一掃進入千鋒手機站

領取全套視頻
千鋒教育

關注千鋒學習站小程序
隨時隨地免費學習課程

當前位置:首頁  >  技術干貨  > 15個Typescript項目常用語法練習,學會它,90%的場景不害怕!(二)

15個Typescript項目常用語法練習,學會它,90%的場景不害怕!(二)

來源:千鋒教育
發布人:syq
時間: 2022-07-14 16:16:00 1657786560

  1.泛型 generics

/* 泛型 generics */

type UseState = <T>(v: T) => [T, (v: T) => void];

const useState: UseState = (v) => {
 return [
   v,
  (v) => {
     //...
  }
];
};

export const Component = () => {
 const [num, setNum] = useState(0); // OK
 const [str, setStr] = useState(""); // OK
 const [list, setList] = useState([1, 2, 3]); // OK

 // test
 const newNum = num + 1;
 setNum(newNum);

 const newStr = str.toUpperCase();
 setStr(newStr);

 const newList = list.slice(1);
 setList(newList);
};

Typescript項目常用語法

  2.部分對象 Partial

/* 部分對象 Partial */

interface User {
  name: string;
  age: number;
  occupation: string;
}

export const users: User[] = [
  {
    name: "Max Mustermann",
    age: 25,
    occupation: "Chimney sweep"
  },
  {
    name: "Wilson",
    age: 23,
    occupation: "Ball"
  }
];

type Criteria = {
  [Property in keyof User]?: User[Property];
};

// 等同于
// type Criteria = Partial<User>;

export const filterUsers = (users: User[], criteria: Criteria): User[] =>
  users.filter((user) => {
    const criteriaKeys = Object.keys(criteria) as (keyof Criteria)[];
    return criteriaKeys.every((fieldName) => {
      return user[fieldName] === criteria[fieldName];
    });
  });

const usersOfAge23 = filterUsers(users, {
  age: 23
});

  3.函數中 this 的使用

/* 函數中 this 的使用 */
// 參考 https://www.typescriptlang.org/docs/handbook/2/functions.html#declaring-this-in-a-function

export const debounce = <F extends (...args: any[]) => void>(
  fn: F,
  delay = 200
) => {
  let timeout = 0;
  return function (this: any, ...args: any[]) {
    timeout && clearTimeout(timeout);
    timeout = window.setTimeout(() => {
      fn.apply(this, args);
    }, delay);
  } as F;
};

  4.類型編程-從基礎類型構造新類型

/* 類型編程-從基礎類型構造新類型 */

export type CustomObject<K extends string | number, T> = { [key in K]: T };

// 1. 示例
// ObjectOfStringValue 對象的值只能為字符串類型
type ObjectOfStringValue = CustomObject<string, string>;
const objOfStringValue: ObjectOfStringValue = {
  h: "hello", // OK
  w: "world" // OK
};

// 2. ObjectOfStringValue
// ObjectOfStringValue 對象的值只能為數字類型
type ObjectOfNumberValue = CustomObject<string, number>;
const objOfNumberValue: ObjectOfNumberValue = {
  a: 100, // OK
  b: 100 // OK
};
const a = objOfNumberValue.a;

// 3. ObjectOfUserValue
type User = {
  username: string;
  age: number;
};

// ObjectOfUserValue 對象的值只能為User類型
type ObjectOfUserValue = CustomObject<string, User>;

const objOfUserValue: ObjectOfUserValue = {
  u1: {
    username: "xiaoming",
    age: 18
  }
};
const { username } = objOfUserValue.u1;

  5.對象類型的繼承

/* 對象類型的繼承 */

export interface Response {
  data: any;
  status: number;
  statusText: string;
}

// 1. Response 類型的基礎上添加 config 屬性
export interface ResponseWithConfig extends Response {
  config: any;
}
const responseWithConfig: ResponseWithConfig = {
  data: 100,
  status: 0,
  statusText: "success",
  config: {}
};

// 2. Response 類型的基礎上改寫 data 屬性類型
export interface StringResponse extends Response {
  data: string;
}
const stringResponse: StringResponse = {
  data: "100",
  status: 0,
  statusText: "success"
};

  6.對象類型的修改

/* 對象類型的修改 */
/* extends可以繼承對象類型,但不可與原類型沖突,此時可以先使用 Omit 去除需要修改的屬性 */

export interface TreeNode {
  id: number;
  value: number;
  children?: TreeNode[];
}

// 1. 去除 TreeNode id 屬性同時修改 children 屬性的類型
export interface NodeWithoutId extends Omit<TreeNode, "id" | "children"> {
  children?: NodeWithoutId[];
}

// OK
const nodeWithoutId: NodeWithoutId = {
  value: 1,
  children: [
    {
      value: 2
    }
  ]
};

  7.類型編程-條件判斷

/* 類型編程-條件判斷 */

export declare type Person<T extends "User" | "Admin"> = T extends "User"
  ? {
      username: string;
    }
  : {
      username: string;
      role: string;
    };

const user: Person<"User"> = { username: "xiaoming" }; // OK

const admin: Person<"Admin"> = { username: "xiaofang", role: "manager" }; // OK

  8.React 組件 Props 范型

/* React 組件 Props 范型 */

import { useState } from "react";

// value 可為字符串或數字
type Value = number | string;
interface Props<T extends Value> {
  value?: T;
  onChange?: (v: T) => void;
  type?: "number" | "text";
}

const Input = <T extends Value>({
  value,
  onChange,
  type = "text"
}: Props<T>) => {
  return (
    <input
      value={value}
      onChange={(e) => {
        const { value } = e.target;
        onChange?.((type === "number" ? parseInt(value, 10) : value) as T);
      }}
      type={type}
    />
  );
};

// test
const Test = () => {
  const [num, setNum] = useState(0);
  const [str, setStr] = useState("");

  return (
    <div>
      <Input value={num} onChange={(v) => setNum(v)} type="number" />
      <Input value={str} onChange={(v) => setStr(v)} />
    </div>
  );
};

export default Input;

  更多關于前端培訓的問題,歡迎咨詢千鋒教育在線名師,如果想要了解我們的師資、課程、項目實操的話可以點擊咨詢課程顧問,獲取試聽資格來試聽我們的課程,在線零距離接觸千鋒教育大咖名師,讓你輕松從入門到精通。

tags:
聲明:本站稿件版權均屬千鋒教育所有,未經許可不得擅自轉載。
10年以上業內強師集結,手把手帶你蛻變精英
請您保持通訊暢通,專屬學習老師24小時內將與您1V1溝通
免費領取
今日已有369人領取成功
劉同學 138****2860 剛剛成功領取
王同學 131****2015 剛剛成功領取
張同學 133****4652 剛剛成功領取
李同學 135****8607 剛剛成功領取
楊同學 132****5667 剛剛成功領取
岳同學 134****6652 剛剛成功領取
梁同學 157****2950 剛剛成功領取
劉同學 189****1015 剛剛成功領取
張同學 155****4678 剛剛成功領取
鄒同學 139****2907 剛剛成功領取
董同學 138****2867 剛剛成功領取
周同學 136****3602 剛剛成功領取
相關推薦HOT
日本在线人数最多的MMORPG| 欧美精品xxxxx| 欧美色欧美亚洲高清在线观看| 日韩人妻中文无码一区二区七区 | XXX.日本学生妹.COM| 被主人调教边C边打屁股作文| 国产内射合集颜射| 老司机67194精品线观看| 人人妻人人爽人人爽| 性XXXX18免费观看视频| 岳女四人共侍一夫婷婷| 成人无码激情视频在线观看| 好男人官网在线观看免费播放| 免费一对一真人视频APP| 少妇被躁爽到高潮无码| 亚洲人成网站18禁止大APP| JLZZJLZZ全部女高潮| 国产女人高潮抽搐喷水嗷嗷叫 | 色综合天天综合网天天小说| 亚洲精品无码专区在线观看| SEERX性欧美老妇| 国精产品自偷自偷综合下载| 欧美成人AA久久狼窝五月丁香| 无码久久精品国产亚洲AV影片| 又色又爽又黄的视频软件APP | 蜜芽VA亚洲VA欧美VA天堂| 四虎影库884AA.WWW| 野花视频在线观看免费高清版| 畜禽CROPROATION| 久久精品国产亚洲AV忘忧草18 | 免费无码作爱视频| 无人区码一码二码三码医生系列| 正在播放强揉爆乳女教师| 国产AV无码专区亚洲版综合| 噜噜狠狠色综合久色AⅤ网址| 天天摸天天碰天天添| 中国女人FREE性HD| 国产精品无码A∨精品影院| 男女啪啪免费观看的网址| 香蕉久久久久久久AV网站| CHINESE妓女野外直播| 狠狠爱无码一区二区三区| 人妻无码一区二区三区蜜桃视频 | 宝宝好大我都握不住了视频| 精品无码国产一区二区三区麻豆| 日韩在线视频一区二区三区| 用嘴巴吃鸡的好处| 国产精品未满十八禁止观看| 秋霞鲁丝片AⅤ无码入口| 亚洲人成网站观看在线播放| 国产成人年无码AV片在线观看| 免费看无码自慰一区二区| 午夜DJ影院免费直播观看完整版| JAPANESE性公交车| 久久国产劲爆∧V内射-百度| 双腿吊起揉捏花蒂| A在线视频播放观看免费观看| 精品少妇人妻AV免费久久洗澡| 少妇性生生活视频在线观看| 777亚洲熟妇自拍无码区| 加比勒色综合久久| 天堂种子在线WWW网| AV香港经典A毛片免费观看| 久久国产情侣露脸精品| 无码中文字幕AⅤ精品影| 边做饭边被躁BD在线播放| 久久夜色精品国产噜噜| 亚洲AV无码专区在线观看漫画| 东京热人妻系列无码专区| 女人18毛片A级女人18水真多| 亚洲精品无码久久久久秋霞| 国产精品爆乳在线播放第一人称| 人人妻人人爽人人人少妇| 中文字幕无码一区二区黑人巨大| 交换人生俱乐部全文免费阅读| 无码AⅤ精品一区二区三区浪潮| 啊轻点灬大巴太粗太长视频| 免费看高清大片的APP在线看| 亚洲欧美成人综合久久久| 国产乱码精品一区二区三区中文 | 国产精品免费高清在线观看| 日本在线 | 中文| 99视频30精品视频在线观看| 狼人在线二线三线区别大吗| 亚洲乱码日产精品一二三| 国产欧美精品一区二区三区| 色欲AV浪潮AV蜜臀AⅤ| 八戒午夜理论片影院| 男生女生差差差轮滑免费| 一本大道无码AV天堂| 久久99精品久久久久久清纯| 亚洲AV一二三又爽又色又色 | 西西人体大胆啪啪私拍色约约| 丰满少妇女人A毛片视频| 秋霞国产午夜伦午夜无码灬| AV成人羞羞漫画永久入口| 免费网站正能量WWW正能量 | 亚洲AV综合AV一区二区三区| 国产麻豆一精品一AV一免费| 同学要做吗PO爱喝花茶的小酥肉 | 亚洲中文久久精品无码WW16| 精品久久久久中文字幕日本| 亚洲成人AV免费| 很嫩很紧直喷白浆在线| 亚洲产在线精品亚洲第一站一| 国产在线精品无码二区二区| 亚洲Aⅴ无码专区在线观看q | 免费A级毛片在线播放| 英语老师没戴套让我C了一节课| 久久精品久久电影免费| 亚洲中文字幕久久精品无码VA| 久久99精品久久只有精品| 亚洲欧美日韩综合久久久| 久久WWW免费人成_看片| 亚洲伊人精品无码一区二区| 久久精品国产导航| 一本色道无码道在线观看| 久久久噜噜噜久噜久久| 揄拍成人国产精品视频| 免费看涩涩无遮挡的漫画| 99国内精品久久久久久久漫画 | ChineSe玩弄老年熟妇| 欧美性猛交XXXXⅩXXA片| ZPS无套内射视频免费播放| 日本不卡在线视频二区三区| 纯肉的日本动漫 在线看| 少妇无码AV无码专区在线观看| 国产成人无码免费视频在线| 午夜不卡AV免费| 精品9E精品视频在线观看| 亚洲综合网站精品一区二区| 裸体丰满白嫩大尺度尤物| 8V蜜桃网最新电影| 人妻丰满熟妇AV无码区不卡| 炖肉计(是今)海棠| 无码乱人伦一区二区亚洲一| 国产亚洲精品A在线观看| 亚洲精品无码AV人在线播放| 久久午夜夜伦鲁鲁片免费无码影视| 中文弹幕日产无线码一区| 欧美成人精品一区二区| 成人国产精品一区二区视频| 天干夜天干天天爽自慰| 国产日韩在线欧美视频| 亚洲欧美日韩精品色XXX| 久久综合亚洲色HEZYO社区| 99久久无码一区人妻| 色婷婷综合和线在线| 国产偷V国产偷V亚洲高清| 亚洲人成网线在线播放VA| 蜜臂无码AV在线| 菠萝蜜进口路线区二1688| 无码人妻精品丰满熟妇区| 精品人妻一区二区三区四区在线 | 国产乱码精品一区三上| 亚洲欧美中文日韩在线V日本| 免费人成在线观看视频播放| 成人AV片无码免费天天看| 午夜性又黄又爽免费看尤物| 久久精品国产免费播| 51CG今日吃瓜热门大瓜| 少妇激情A∨一区二区三区| 国色天香网WWW在线观看| 中文字幕人妻三级中文无码视频| 日本适合十八岁以上的护肤品| 国产女主播高潮在线播放| 中国又粗又大XXXXBBBB| 日日碰狠狠添天天爽| 狠狠躁夜夜躁人人爽天天不| 97电影九七电影理论片| 他将头埋进双腿间吮小核| 九九九精品成人免费视频| A级黑粗大硬长爽猛出猛进| 无码国产精品一区二区免费模式| 久久久久国色AⅤ免费看| 把腿张开我要cao死你在线观看| 无码少妇一区二区三区免费| 久久夜色撩人精品国产小说| 成人区人妻精品一区二区不卡| 亚洲国产精品无码第一区二区三区| 免费看黑人强伦姧人妻| 绯色av一区二区三区蜜臀| 亚洲色偷拍一区二区三区| 日本高清无卡码一区二区| 娇妻当着我的面被4P| YY8090福利午夜理论片| 亚洲AV无码成人精品区欧洲| 女人被男人吃奶到高潮| 国产麻豆精选AV| 91人妻人人澡人人爽人人精品| 无码午夜人妻一区二区不卡视频| 麻花豆传媒剧国产MV入口| 国产高潮流白浆喷水在线观看| 玉蒲团之官人我要| 天堂久久天堂AV色综合| 浪荡受NP纯肉公共场合BL男男| 国产99视频精品免费视频36| 在线观看大片免费播放器| 我的真實亂倫故事| 年轻的少妇A级伦理|