首页 文章

从TypeScript中的函数返回对象(具有特定键,值类型)

提问于
浏览
2

假设我有一个需要返回 StringMap<string, boolean> 类型的函数 . 有效的示例返回值为: {"required": true} .

现在,我've read in a tutorial (it'不重要哪个教程)你可以创建一个返回类型为 { [s: string]: boolean } 的函数,这与上面的StringMap是相同的返回类型 .

我不明白这两种返回类型是怎样的?第二个版本甚至有效吗?

  • 我在TypeScript中看到的所有返回类型都只包含过去的类型,即boolean,number,any . 例如 function (): number {} . 在我们的第二个版本中,我们使用 s: string ,这意味着我们给变量一个名称,并指定它的类型,我们怎么突然允许变量名为 s

  • 除此之外,我们将此字符串放在数组 [s: string] 中作为第二个版本中的键(因此键现在是一个数组) . StringMap有一个字符串作为键 .

2 回答

  • 0

    语法与您的想法略有不同 . 它是定义字典\ Map 的独特语法 .

    { [s: string]: boolean } 表示:一个映射,它有一个带字符串类型的键,它的值是boolean . s 完全没有意义,可能是你想要的任何东西 .

    (那么为什么首先给它命名?我的猜测是在映射更复杂的类型时使代码更清晰 . 有时你会想要调用索引 id ,有时 address 等等 . )

    更多信息here,索引类型就是你想要的 .

    在线的Typescript手册并不是最友好的文档,但我认为它已经足够好了,我建议每个使用打字稿的人至少都要浏览它 . 特别是因为在2.0中他们添加了一堆疯狂\ awesome类型的功能,如映射类型 .

  • 5

    { [s: string]: boolean } 类型定义indexable type接口 .

    您看到的数组就是决定定义接口索引的语法 .

    据我所知,密钥的名称被忽略,只有类型才是重要的 .

    此代码 { [s: string]: boolean } 定义了一个可索引的接口,其中索引是字符串,值是布尔值 .

    我假设 StringMap 的定义如下:

    export interface StringMap<T, U> = { [s: T]: U };
    

    如果你问我这是多余的(因为名称说它应该是一个字符串映射,所以键应该是字符串) . 我会将 IStringMap 接口声明为:

    export interface IStringMap<T> = { [key: string]: T };
    

    TypeScript中的接口只定义对象的“形状” . 前三个定义具有相同的形状,因此这是完全有效的:

    function fn() : IStringMap<boolean> { 
        let myMap : StringMap<string, bool> = { };
    
        myMap["foo"] = true;
        myMap["bar"] = false;
        myMap["baz"] = true;
    
        return myMap;
    }
    
    let foo: { [bazzinga: string]: boolean }  = fn();
    

相关问题