Ts 索引签名

作者: 逗婆苍穹 | 来源:发表于2024-05-07 10:01 被阅读0次
  • 数字索引签名
interface T {
    [index:number]:string
}
let arr:T = ["1","2",3] // 第三项:不能将类型“number”分配给类型“string”
let obj:T = {
    0:'0', // ok
    a:'1' // 对象字面量只能指定已知属性,并且“a”不在类型“T”中
}

  • 字符串索引签名
interface T {
    [key:string]:number
}
let obj:T = {
    "name":100,
    "age":"200"  // 不能将类型“string”分配给类型“number”
}
  • 注意事项
const symbol = Symbol("key");
interface A {
  [y: string]: string;
}
let a: A = {
  x: "1", // ok
  symbol: "1",  // ok
  1: "1",  // ok
};
interface B {
  [x: number]: string;
}
let b: B = {
  x:'1', //  对象字面量只能指定已知属性,并且“x”不在类型“B”中
  symbol :'1',  //  对象字面量只能指定已知属性,并且“symbol ”不在类型“B”中
  1: "1",  // ok
};
interface T {
    name: string; // Ok
    age?: number; // 类型“number | undefined”的属性“age”不能赋给“string”索引类型“string”
    sex?: undefined; // OK
    [propName: string]: string | undefined;
}
  • 可以同时使用两种类型的索引,但数字索引的返回值必须是字符串索引返回值类型的子类型。 因为当使用 number 来索引时,JavaScript 会将它转换成 string 然后再去索引对象:
interface Animal {
  name: string;
}
interface Dog extends Animal {
  breed: string;
}

interface NotOkay {
  [x: string]: Dog;
  [x: number]: Animal; // Error
}

interface Okay {
  [x: string]: Animal;
  [x: number]: Dog; // OK
}

相关文章

网友评论

    本文标题:Ts 索引签名

    本文链接:https://www.haomeiwen.com/subject/fwmrfjtx.html