TypeScript & LeetCode

TypeScript In Action

TypeScript 复杂类型

编写复杂的 TypeScript 类型

  1. // 方法「只可能」有两种类型签名
  2. interface Action<T> {
  3. payload?: T
  4. type: string
  5. }
  6. asyncMethod<T, U>(input: Promise<T>): Promise<Action<U>>
  7. syncMethod<T, U>(action: Action<T>): Action<U>
  1. interface Action<T> {
  2. payload?: T;
  3. type: string;
  4. }
  5. // 还可能有一些任意的「非函数属性」
  6. class EffectModule {
  7. count = 1;
  8. message = "hello!";
  9. delay(input: Promise<number>) {
  10. return input.then((i) => ({
  11. payload: `hello ${i}!`,
  12. type: "delay",
  13. }));
  14. }
  15. setMessage(action: Action<Date>) {
  16. return {
  17. payload: action.payload!.getMilliseconds(),
  18. type: "set-message",
  19. };
  20. }
  21. }
  1. // 现在有一个叫 connect 的函数,它接受 EffectModule 实例,将它变成另一个对象,
  2. // 这个对象上只有「EffectModule 的同名方法」,但是方法的类型签名被改变了
  3. asyncMethod<T, U>(input: Promise<T>): Promise<Action<U>>
  4. // 变成了
  5. asyncMethod<T, U>(input: T): Action<U>
  6. syncMethod<T, U>(action: Action<T>): Action<U>
  7. // 变成了
  8. syncMethod<T, U>(action: T): Action<U>

demo

  1. interface Action<T> {
  2. payload?: T;
  3. type: string;
  4. }
  5. class EffectModule {
  6. count = 1;
  7. message = "hello!";
  8. delay(input: Promise<number>) {
  9. return input.then((i) => ({
  10. payload: `hello ${i}!`,
  11. type: "delay",
  12. }));
  13. }
  14. setMessage(action: Action<Date>) {
  15. return {
  16. payload: action.payload!.getMilliseconds(),
  17. type: "set-message",
  18. };
  19. }
  20. }

  1. type Connected = {
  2. delay(input: number): Action<string>;
  3. setMessage(action: Date): Action<number>;
  4. };
  5. const effectModule = new EffectModule();
  6. const connected: Connected = connect(effectModule);

要求:

在题目链接[1] 里面的 index.ts 文件中,

有一个 type Connect = (module: EffectModule) => any,将 any 替换成题目的解答,让编译能够顺利通过,

并且 index.ts 中 connected 的类型与 Connected「完全匹配」

  1. type Connected = {
  2. delay(input: number): Action<string>;
  3. setMessage(action: Date): Action<number>;
  4. };

https://github.com/LeetCode-OpenSource/hire/blob/master/foundations-zh/src/index.ts


  1. export interface ErrorMessage {
  2. message: string
  3. stack: Array<{
  4. line: number
  5. column: number
  6. filename: string
  7. }>
  8. }
  9. export function parseError(err: Error): ErrorMessage {
  10. // implement
  11. }

solution


refs

LeetCode 面试题

https://github.com/LeetCode-OpenSource/hire

https://mp.weixin.qq.com/s/dWF9bPd9QhgsnuAHX33bNQ

https://github.com/LeetCode-OpenSource/hire/blob/master/foundations_zh.md

https://github.com/LeetCode-OpenSource/hire/blob/master/typescript_zh.md



xgqfrms 2012-2020

www.cnblogs.com 发布文章使用:只允许注册用户才可以访问!


TypeScript & LeetCode的更多相关文章

  1. 「LeetCode」0003-Add Two Numbers(Typescript)

    分析 代码 /** * @param {ListNode} l1 * @param {ListNode} l2 * @return {ListNode} */ var addTwoNumbers=fu ...

  2. TypeScript 技巧

    前言 很早以前就尝试过使用 TypeScript 来进行日常编码,但自己对静态类型语言的了解并不深入,再加上 TypeScript 的类型系统有着一定的复杂度,因此感觉自己并没有发挥好这门语言的优势, ...

  3. 数据结构篇-数组(TypeScript版+Java版)

    1.TypeScript版本 export default class MyArray<E> { public data: E[]; public size: number = 0; /* ...

  4. TypeScript: Angular 2 的秘密武器(译)

    本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch?v=e3djIqAGqZo 开场白 开场白主要分为三部分: 感谢了 ...

  5. 我为什么要写LeetCode的博客?

    # 增强学习成果 有一个研究成果,在学习中传授他人知识和讨论是最高效的做法,而看书则是最低效的做法(具体研究成果没找到地址).我写LeetCode博客主要目的是增强学习成果.当然,我也想出名,然而不知 ...

  6. TypeScript为Zepto编写LazyLoad插件

    平时项目中使用的全部是jQuery框架,但是对于做webapp来说jQuery太过于庞大,当然你可以选择jQuery 2.*针对移动端的版本. 这里我采用移动端使用率比较多的zepto框架,他跟jqu ...

  7. TypeScript Vs2013 下提示Can not compile modules unless '--module' flag is provided

    VS在开发TypeScript程序时候,如果import了模块有的时候会有如下提示: 这种情况下,只需要对当前TypeScript项目生成设置为AMD规范即可!

  8. TypeScript

    TypeScript: Angular 2 的秘密武器(译)   本文整理自Dan Wahlin在ng-conf上的talk.原视频地址: https://www.youtube.com/watch? ...

  9. LeetCode All in One 题目讲解汇总(持续更新中...)

    终于将LeetCode的免费题刷完了,真是漫长的第一遍啊,估计很多题都忘的差不多了,这次开个题目汇总贴,并附上每道题目的解题连接,方便之后查阅吧~ 477 Total Hamming Distance ...

随机推荐

  1. RabbitMq消费者在初始配置之后进行数据消费

    RabbitMq消费者在初始配置之后进行数据消费 问题背景 在写一个消费rabbitmq消息的程序是,发现了一个问题,消费者的业务逻辑里面依赖这一些配置信息,但是当项目启动时,如果队列里面有积压数据的 ...

  2. 主题模型(Topic)

    消息队列 RocketMQ - 打造金融级消息服务 - 阿里云 https://www.aliyun.com/product/rocketmq 主题模型(Topic) 发布/订阅(Pub/Sub) 一 ...

  3. IntelliJ IDEA 20 岁了!20 年前的第 1 版曝光…

    IntelliJ IDEA 最近发布了 20 周年庆典: https://www.jetbrains.com/lp/intellijidea-20-anniversary/ IntelliJ IDEA ...

  4. docker基本使用-nginx

    在docker环境中部署使用nginx 1,安装nginx docker pull nginx 2,随便启动一下nginx,测试是否安装成功 a,启动nginx sudo docker run --n ...

  5. Linux忽略大小写的查找技巧(转)

    1.vim 中的查找 Linux 下 vim搜索文件内容时加上 \c 参数可以忽略搜索字符的大小写. 比如用vim 搜索文件中的 China 时 可用 :/china\c 2. find 查找 Lin ...

  6. Spring3文件上传,提速你的Web开发

    Spring1 推出的时候可以说是不小的颠覆了J2EE 的开发,彻底把EJB打败,将J2EE开发进行简化,Spring2 推出以后完美的与多种开源框架与服务器的结合,让你对其拥抱的更紧,Spring变 ...

  7. 彻底掌握 AQS

    前言 AQS( AbstractQueuedSynchronizer )是一个用来构建锁和同步器(所谓同步,是指线程之间的通信.协作)的框架,Lock 包中的各种锁(如常见的 ReentrantLoc ...

  8. Python实现量子态采样

    什么是量子态矢量? 在前面一篇量子系统模拟的博客中,我们介绍了使用python去模拟一个量子系统演化的过程.当我们尝试理解量子态和量子门操作时,可以通过其矩阵形式的运算来描述量子态演化的过程: \[\ ...

  9. memcache安装及解决无法远程连接的问题

    Memcached是什么 Memcached是一个自由开源的,高性能,分布式内存对象缓存系统. Memcached是以LiveJournal旗下Danga Interactive公司的Brad Fit ...

  10. Codeforces Round #533 (Div. 2) A. Salem and Sticks(枚举)

    #include <bits/stdc++.h> using namespace std; int main() { int n;cin>>n; int a[n];for(in ...