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