国产睡熟迷奷白丝护士系列精品,中文色字幕网站,免费h网站在线观看的,亚洲开心激情在线

      <sup id="hb9fh"></sup>
          1. 千鋒教育-做有情懷、有良心、有品質(zhì)的職業(yè)教育機構(gòu)

            手機站
            千鋒教育

            千鋒學(xué)習(xí)站 | 隨時隨地免費學(xué)

            千鋒教育

            掃一掃進入千鋒手機站

            領(lǐng)取全套視頻
            千鋒教育

            關(guān)注千鋒學(xué)習(xí)站小程序
            隨時隨地免費學(xué)習(xí)課程

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

            15個Typescript項目常用語法練習(xí),學(xué)會它,90%的場景不害怕?。ǘ?/h1>
            來源:千鋒教育
            發(fā)布人: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.函數(shù)中 this 的使用

            /* 函數(shù)中 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.類型編程-從基礎(chǔ)類型構(gòu)造新類型

            /* 類型編程-從基礎(chǔ)類型構(gòu)造新類型 */

            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 對象的值只能為數(shù)字類型
            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 類型的基礎(chǔ)上添加 config 屬性
            export interface ResponseWithConfig extends Response {
              config: any;
            }
            const responseWithConfig: ResponseWithConfig = {
              data: 100,
              status: 0,
              statusText: "success",
              config: {}
            };

            // 2. Response 類型的基礎(chǔ)上改寫 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 可為字符串或數(shù)字
            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;

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

            tags:
            聲明:本站稿件版權(quán)均屬千鋒教育所有,未經(jīng)許可不得擅自轉(zhuǎn)載。
            10年以上業(yè)內(nèi)強師集結(jié),手把手帶你蛻變精英
            請您保持通訊暢通,專屬學(xué)習(xí)老師24小時內(nèi)將與您1V1溝通
            免費領(lǐng)取
            今日已有369人領(lǐng)取成功
            劉同學(xué) 138****2860 剛剛成功領(lǐng)取
            王同學(xué) 131****2015 剛剛成功領(lǐng)取
            張同學(xué) 133****4652 剛剛成功領(lǐng)取
            李同學(xué) 135****8607 剛剛成功領(lǐng)取
            楊同學(xué) 132****5667 剛剛成功領(lǐng)取
            岳同學(xué) 134****6652 剛剛成功領(lǐng)取
            梁同學(xué) 157****2950 剛剛成功領(lǐng)取
            劉同學(xué) 189****1015 剛剛成功領(lǐng)取
            張同學(xué) 155****4678 剛剛成功領(lǐng)取
            鄒同學(xué) 139****2907 剛剛成功領(lǐng)取
            董同學(xué) 138****2867 剛剛成功領(lǐng)取
            周同學(xué) 136****3602 剛剛成功領(lǐng)取
            相關(guān)推薦HOT
            什么是PlatformIo?

            PlatformIO是什么PlatformIO是一個全面的物聯(lián)網(wǎng)開發(fā)平臺,它為眾多硬件平臺和開發(fā)環(huán)境提供了統(tǒng)一的工作流程,有效簡化了開發(fā)過程,并能兼容各種...詳情>>

            2023-10-14 12:55:06
            云快照與自動備份有什么區(qū)別?

            1、定義和目標(biāo)不同云快照的主要目標(biāo)是提供一種快速恢復(fù)數(shù)據(jù)的方法,它只記錄在快照時間點后的數(shù)據(jù)變化,而不是所有的數(shù)據(jù)。自動備份的主要目標(biāo)...詳情>>

            2023-10-14 12:48:59
            服務(wù)器為什么要用Linux?

            服務(wù)器為什么要用Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,Linux在眾多選擇中脫穎而出。Linux作為服務(wù)器操作系統(tǒng)的優(yōu)選,有其獨特的優(yōu)勢和特點。包括其...詳情>>

            2023-10-14 12:34:11
            ORM解決的主要問題是什么?

            ORM(對象關(guān)系映射)解決的主要問題是將關(guān)系數(shù)據(jù)庫與面向?qū)ο缶幊讨g的映射困境。在傳統(tǒng)的關(guān)系數(shù)據(jù)庫中,數(shù)據(jù)以表格的形式存儲,而在面向?qū)ο?..詳情>>

            2023-10-14 12:26:19
            Go為什么不支持三元運算符?

            Go為什么不支持三元運算符Go語言是一種以簡潔和有效性為目標(biāo)的編程語言,因此在設(shè)計過程中,Go的設(shè)計者刻意排除了一些他們認為可能導(dǎo)致復(fù)雜性或...詳情>>

            2023-10-14 12:12:36