我是打字稿的新手,而且我正在阅读其他人的代码并且无法使用此声明:
private somevar: { [s: string]: string };
这是什么类型的?方括号表示一个数组,但是我确切地想知道它的形状是什么。
答案 0 :(得分:10)
它是一种可转位类型。查看此变量定义的类型表达式:
<section class="content">
<div class="box">
<div class="box-body">
<%= simple_form_for :ride, url: order_path do |f| %>
<p>
<%= f.label :client %><br>
<%= f.text_field :client %>
</p>
<p>
<%= f.submit 'Adicionar', :class => 'btn btn-primary' %>
</p>
<% end %>
</div>
</div>
</section>
let myIndexVar: { [key: string]: number; };
表示它是一个对象。: { ... }
是对象的索引签名。在索引签名中:
[key: string]: number;
定义了密钥的名称 - [key: string]
- 以及密钥的类型 - key
。string
是值的类型 - : number;
。这些类型的用法如下:
number
请注意,您可以为密钥指定任何您喜欢的名称。给它一个描述性名称有助于说出密钥是什么,尽管变量名也应该这样做:
答案 1 :(得分:1)
可索引类型与我们如何使用接口来描述函数类型类似,我们也可以描述可以“索引到”的类型 像[10]或ageMap [&#34; daniel&#34;]。可索引类型具有索引 签名,描述我们可以用来索引的类型 对象,以及索引时的相应返回类型。让我们 举个例子:
interface StringArray { [index: number]: string; } let myArray: StringArray; myArray = ["Bob", "Fred"]; let myStr: string = myArray[0];
上面,我们有一个具有索引签名的StringArray接口。 此索引签名表明当StringArray使用a索引时 数字,它将返回一个字符串。
支持的索引签名有两种类型:字符串和数字。 可以支持两种类型的索引器,但类型 从数字索引器返回的必须是返回类型的子类型 来自字符串索引器。这是因为当用数字索引时, 在索引之前,JavaScript实际上会将其转换为字符串 一个东西。这意味着使用100(数字)的索引是相同的 用&#34; 100&#34;索引的东西(一个字符串),所以这两个需要 是一致的。
class Animal { name: string; } class Dog extends Animal { breed: string; } // Error: indexing with a 'string' will sometimes get you a Dog! interface NotOkay { [x: number]: Animal; [x: string]: Dog; }
虽然字符串索引签名是一种强大的描述方式 “字典”模式,他们还强制所有属性匹配 他们的回报类型。这是因为字符串索引声明了这一点 obj.property也可以作为obj [&#34; property&#34;]。在下面的 例如,name的类型与字符串索引的类型不匹配 type-checker会出错:
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 }