索引签名Argument of type ‘Person‘ is not assignable to parameter of type ‘Record<string, string>‘ Index

[key: string]: any; - 这行声明了一个索引签名(index signature),表示可以额外包含任意键值对的属性,并且这些额外的属性的键(key)必须是字符串类型,值(value)可以是任意类型

可以添加索引签名([key: string]: string;)来解决

除此之外换可以通过https://codegen.studio/blog/jpmuwe/the-argument-of-type-is-not-assignable-to-the-parameter-of-type/

案例一:

interface Person {
	name: string;
	// [key: string]: string;
}
const a: Person = {
	name: "wangershu"
};

type Animal = {
	name: string;
};
const b: Animal = {
	name: "dog"
};

let user: Record<string, string>;

user = a;
// record赋值给interface类型会报错
user = b;
// record赋值给type类型并不会报错

案例二:

interface Person {
	name: string;
	email: string;
	// [key: string]: string;
}

function logRecord(record: Record<string, string>): void {
	/* ... */
}

const me: Person = {
	name: "John",
	email: "john@doe.com"
};

// Person类型赋值给Record的时候必须要明确
// 但是interface会进行声明合并
// 添加索引签名
logRecord(me); // error: "The argument of type 'Person' is not assignable to the parameter of type 'Record<string, string>'"
const dictionary: Record<string, string> = me;

interface type

// interface会进行声明合并
// 如下不报错
interface A {
	name: string;
}
interface A {
	age: number;
}

const a: A = {
	name: "wangershu",
	age: 18
};

// type 不会进行声明合并
// 如下报错
type A = {
	name: string;
};
type A = {
	age: number;
};

const a: A = {
	name: "wangershu",
	age: 18
};

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

每天吃饭的羊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值