[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
};