typescript 类型“...”的参数不能赋值给类型“...”的参数TS 2345

rvpgvaaj  于 2023-05-08  发布在  TypeScript
关注(0)|答案(2)|浏览(528)

鉴于以下情况:

interface MyInterface {
  type: string;
}

let arr: object[] = [ {type: 'asdf'}, {type: 'qwerty'}]

// Alphabetical sort
arr.sort((a: MyInterface, b: MyInterface) => {
      if (a.type < b.type) return -1;
      if (a.type > b.type) return 1;
      return 0;
    });

有人可以帮助破译TS错误:

// TypeScript Error
[ts]
Argument of type '(a: MyInterface, b: MyInterface) => 0 | 1 | -1' is not assignable to parameter of type '(a: object, b: object) => number'.
  Types of parameters 'a' and 'a' are incompatible.
    Type '{}' is missing the following properties from type 'MyInterface': type [2345]
tjrkku2a

tjrkku2a1#

下面是一个简单的例子来重现错误:

interface MyInterface {
  type: string;
}
let arr:object[] = []
// Error: "object" is not compatible with MyInterface 
arr.sort((a: MyInterface, b: MyInterface) => {});

这是一个错误的原因,因为object不能被分配给MyInterface类型的东西:

interface MyInterface {
  type: string;
}
declare let foo: object;
declare let bar: MyInterface;
// ERROR: object not assignable to MyInterface
bar = foo;

这是一个错误的原因是因为object{}同义。{}没有type属性,因此与MyInterface不兼容。

修复

也许你想使用any(而不是object)。anyeverything 兼容。

最好修复

使用确切的类型,即MyInterface

interface MyInterface {
  type: string;
}
let arr:MyInterface[] = []; // Add correct annotation 🌹
arr.sort((a: MyInterface, b: MyInterface) => {});
thigvfpy

thigvfpy2#

如果一个对象已经是一个定义的类型,它可能会导致这个错误。

// does not work
var user = aws.results.Item;
user = getUserType(user);
doSomething(user);

// works
var user = aws.results.Item;
var userTyped = getUserType(user);
doSomething(userTyped);

// typed user parameter
function doSomething(user: User) {}

创建一个新的引用,而不是重用现有的引用。

相关问题