use*_*818 4 typescript index-signature
假设接口有一些已知的属性及其类型,并且可以有其他具有未知键和一些其他类型的属性,例如:
interface Foo {
length: number;
[key: string]: string;
}
const foo : Foo = {
length: 1,
txt: "TXT",
};
Run Code Online (Sandbox Code Playgroud)
TS错误:
'number' 类型的属性 'length' 不能分配给字符串索引类型 'string'。
应该如何键入这样的接口?
[key: string]: string;
这可以防止Foo
接口没有字符串属性(在您的示例中,number
)。
您可以做的是将两个接口中的已知和未知属性分开,并将您的目标类型定义为联合类型,如下所示:
interface Foo {
length: number;
}
interface Bar {
[key: string]: string ;
}
type FooBar = Foo | Bar;
const foo : FooBar = {
length: 1, // its ok defined in foo
txt: "TXT", // string is ok
baz : 3 // error because its not string
};
Run Code Online (Sandbox Code Playgroud)
归档时间: |
|
查看次数: |
248 次 |
最近记录: |