typescript interface 取值用法?

type A = 'a';
type B = 'b';
type C = 'c';

interface List {
  a: A;
  b: B;
  c: C;
}

const myFunc = (name: keyof List) => {
  type MyType = List[name];
  return 'something' as MyType;
  // 如何实现 myFunc('a') 返回的是A类型,myFunc('b')返回的是B类型
  // 这样写会报错:
  // Type 'name' cannot be used as an index type
}
阅读 3.1k
2 个回答
type FnReturnType<T extends keyof List> = List[T];
const myFunc = function<T extends keyof List> (name: T): FnReturnType<T> {
  return 'something' as any;
}

class A {}
class B {}

function f(p: 'a'): A;
function f(p: 'b'): B;
function f(p: 'a' | 'b'): A | B {
  if (p === 'a') {
    return new A();
  } else if (p === 'b') {
    return new B();
  }
}

这个特性叫做函数重载function overloads

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题