gpt4 book ai didi

TypeScript:可索引类型,string[] 不可赋值

转载 作者:搜寻专家 更新时间:2023-10-30 21:29:59 26 4
gpt4 key购买 nike

TypeScript的有Indexable type这让我们描述了我们可以索引的类型。例如可以像这样定义一个字符串数组:

interface StringArray { 
[key: number]: string;
}

let x: StringArray = ['Sheldon', 'Cooper'];
x[0] = 'John';
x[1] = 'Snow';

通过查看索引签名[key: number]: string;我的理解是,它定义了key/index的名称:key和类型键的类型:string,以及返回值的类型,即 number。现在,当我将键的类型更改为字符串时,出现错误。

interface MyStringArray { 
[key: string]: string;
}

//Type 'string[]' is not assignable to type 'MyStringArray'.
//Index signature is missing in type 'string[]'.
var y: MyStringArray = ['Sheldon', 'Cooper']; //<- causes the error
y[0] = 'John';
y[1] = 'Snow';

我无法理解为什么当我将键的类型更改为 string 时它会显示警告。为什么当 key 的类型是 numeric 时它没有发生。是因为数组导致数组索引是数字吗?

当我们同时拥有索引类型和其他属性时会发生什么

示例 1:显示索引器类型错误

interface NumberDictionary {
[index: string]: number;
length: number; // ok, length is a number
name: string; // error, the type of 'name' is not a subtype of the indexer
}

示例 2: 当我将 [index:string] 的类型更改为 [index: number] 时,它没有显示错误。 p>

interface NumberDictionary {
[index: number]: number;
length: number; // ok, length is a number
name: string; // after chaning `index` type to number it's does'nt show error
}

最佳答案

语法 [key: number]: string 将数字键和值定义为字符串(您描述的其他方式)。字符串数组由数字索引,因此可以用这样的结构来描述。

至于你的接口(interface)再考虑一个:

interface NumberDictionary {
[index: number]: number;
prop: string; // ok, irrelevant to indexer as prop is not a number
'1': string; // error - must return number
}

只有满足作为数字的 key 要求的属性才会根据索引返回类型进行验证。这是有道理的,因为您无法使用 [] 语法访问 prop

关于TypeScript:可索引类型,string[] 不可赋值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41888728/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com