typescript 在编译时决定类型信息?

hec6srdp  于 2023-03-31  发布在  TypeScript
关注(0)|答案(1)|浏览(97)

我有一个类型A或B的示例。我想创建一个函数,它接受A或B的参数并返回其 Package 的参数。

type A = { name: string };
type B = A[];

type DucktypedA = { // idc how this struct looks like as we can differentiate between A and B
  a: A,
};

type DucktypedB = {
  b: B,
}

function test(arg: A | B): DucktypedA | DucktypedB {
  if (arg instanceof A) {
    return { a: arg };
  } else {
    return { b: arg };
  }
}

这在打字机上可能吗?

const a = { name: "me" };
const wrappedA = test(a); // --> { a: { name: "me" } }

const b = [{ name: "me" }];
const wrappedB = test(b); // --> { b: [{ name: "me" }] }
gjmwrych

gjmwrych1#

instanceof不能处理类型脚本类型。它只能处理类,但仅此而已

class A {}

const a = new A();

console.assert(a instanceof A)

你可以使用类型保护函数把“类型检查”带入运行时领域。Play

function isA(v: any): v is A {
    return 'name' in v
}

function test(arg: A | B): DucktypedA | DucktypedB {
  if (isA(arg)) {
    return { a: arg };
  } else {
    return { b: arg };
  }
}

相关问题