[{"data":1,"prerenderedAt":118},["ShallowReactive",2],{"content:\u002Fposts\u002F2024\u002Fts-generics":3,"surround:\u002Fposts\u002F2024\u002Fts-generics":107},{"id":4,"title":5,"body":6,"canonical":87,"categories":88,"date":90,"description":87,"draft":91,"extension":92,"image":93,"meta":94,"navigation":95,"path":96,"permalink":87,"readingTime":97,"recommend":87,"references":87,"seo":102,"sitemap":103,"stem":104,"tags":105,"type":87,"updated":90,"__hash__":106},"content\u002Fposts\u002F2024\u002Fts-generics.md","TypeScript 泛型",{"type":7,"value":8,"toc":78},"minimark",[9,13,17,20,31,34,40,47,50,56,59,62,68,72],[10,11,12],"h2",{"id":12},"什么是泛型",[14,15,16],"p",{},"可以理解为动态的类型，类型中可以接受参数。",[14,18,19],{},"我们要做一个输入什么就返回什么的函数，当我们将类型写死后，传递其他类型的数据就会在编译时报错类型错误。我们能不能做到在传递参数时声明一个类型，让我们声明的类型进行判断呢？",[21,22,28],"pre",{"className":23,"code":25,"language":26,"meta":27},[24],"language-ts","function returnSomething(inputSomething: string): string {\n    return inputSomething\n}\n\nreturnSomething\u003Cstring>(\"wx\")\nreturnSomething(23) \u002F\u002F 报错\n","ts","",[29,30,25],"code",{"__ignoreMap":27},[14,32,33],{},"这时我们可以使用泛型接受类型参数",[21,35,38],{"className":36,"code":37,"language":26,"meta":27},[24],"function returnSomething\u003CT>(inputSomething: T): T {\n    return inputSomething\n}\n\nreturnSomething\u003Cstring>(\"wx\")\nreturnSomething\u003Cnumber>(2)\n",[29,39,37],{"__ignoreMap":27},[10,41,43,44],{"id":42},"泛型的继承-extends","泛型的继承 ",[29,45,46],{"code":46},"extends",[14,48,49],{},"有时我们需要一些特定类型的参数，里面包含一些相同的类型，我们可以用 extends 继承来约束可以传递的参数",[21,51,54],{"className":52,"code":53,"language":26,"meta":27},[24],"function getLength\u003CT extends { length: number }>(arg: T): number {\n    return arg.length\n}\nfunction getLength\u003CT extends { length: number }>(arg: T): number {\n    return arg.length\n}\ngetLength(\"www\")\ngetLength([2, 3, 4])\ngetLength(2) \u002F\u002F 报错\n",[29,55,53],{"__ignoreMap":27},[10,57,58],{"id":58},"类中使用",[14,60,61],{},"我们可以使用泛型对函数的类型做限制，将类型的定义部分开放给用户。",[21,63,66],{"className":64,"code":65,"language":26,"meta":27},[24],"class User\u003CT> {\n    constructor(private user: T) {}\n    get(): T {\n        return this.user\n    }\n}\ninterface IUser {\n    name: string\n    age: number\n}\nconst user = new User\u003CIUser>({ age: 2, name: \"xxx\" })\nconsole.log(user.get())\n",[29,67,65],{"__ignoreMap":27},[10,69,71],{"id":70},"interface-使用泛型","interface 使用泛型",[21,73,76],{"className":74,"code":75,"language":26,"meta":27},[24],"interface IArticle\u003CB, C> {\n    title: string\n    isLock: B\n    comments: C[]\n}\ninterface CommentType { content: string }\n\nconst article: IArticle\u003Cboolean, CommentType> = {\n    title: \"测试文章\",\n    isLock: false,\n    comments: [{ content: \"测试评论\" }],\n}\n",[29,77,75],{"__ignoreMap":27},{"title":27,"searchDepth":79,"depth":79,"links":80},4,[81,83,85,86],{"id":12,"depth":82,"text":12},2,{"id":42,"depth":82,"text":84},"泛型的继承 extends",{"id":58,"depth":82,"text":58},{"id":70,"depth":82,"text":71},null,[89],"代码","2024-03-17 00:18:11",false,"md","https:\u002F\u002Fbitmc.uno\u002Fpicgo\u002F679adb4c34f00-78.webp",{},true,"\u002Fposts\u002F2024\u002Fts-generics",{"text":98,"minutes":99,"time":100,"words":101},"2 min read",1.68,100800,336,{"title":5,"description":87},{"loc":96},"posts\u002F2024\u002Fts-generics",[],"rb1WSK5U45h18mrg_jGFZ4akP43gG88XJ6sfVxIjMYo",[108,113],{"title":109,"path":110,"stem":111,"date":112,"type":87,"children":-1},"TypeScript 断言","\u002Fposts\u002F2024\u002Fts-as","posts\u002F2024\u002Fts-as","2024-03-17 00:14:35",{"title":114,"path":115,"stem":116,"date":117,"type":87,"children":-1},"TypeScript 类","\u002Fposts\u002F2024\u002Fts-class","posts\u002F2024\u002Fts-class","2024-03-17 00:23:37",1789642592398]