向函数添加符号

时间:2020-03-01 03:21:05

标签: typescript

考虑下面的代码

namespace Add {

  type AddType = {
    (x: number, y: number): number;
  };

  const add: AddType = (x: number, y: number) => {
    return x + y;
  };
}

是否可以在下面的代码中为AddType添加一个“唯一符号”。

namespace AddUsingSymbol {

  declare const AddSymbol: unique symbol;

  type AddType = {
    (x: number, y: number): number;
    [AddSymbol]: void;
  };

  /* const add: AddType = (x: number, y: number) => {
    return x + y;
  }; */
  // the code above does not compile
}

是否可以安全地使用Symbol创建AddType实例,而无需进行类型转换?

1 个答案:

答案 0 :(得分:1)

如果您不想使用类型断言,那么我建议使用Object.assign()将符号键属性复制到函数对象中,如下所示:

const add: AddType = Object.assign((x: number, y: number) => {
    return x + y;
}, { [AddSymbol]: undefined });

编译器将其视为类型安全。好吧,希望能有所帮助;祝你好运!

Playground link to code

相关问题