首页 > 解决方案 > 是否可以在 Typescript 中构造一个允许对象但不允许错误的类型?

问题描述

我正在尝试在记录器中修复一个奇怪的角落案例,其中的调用log({ info: 'information' })按预期工作,但log(new Error())没有。
虽然没有可用的修复方法,但我想重写 log 方法以允许除错误之外的所有对象作为参数。在打字稿中可以吗?

我尝试过使用新的条件类型:

type NotError<T> = T extends Error ? never : T;

log(NotError<object>): void

但这仍然允许调用log(new Error())没有任何错误或警告。

PS:该错误是由具有不可枚举属性的所有对象引起的,但我们唯一涉及此类对象的用例是错误。

标签: typescript

解决方案


问题是它NotError<object>只会解决object. 你想要的是使用泛型:

function log<T>(notError: NotError<T>): void {
  console.log(notError);
}

更多阅读:https ://www.typescriptlang.org/docs/handbook/generics.html


推荐阅读