首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >typescript如何使用key-value的类型保护

typescript如何使用key-value的类型保护
EN

Stack Overflow用户
提问于 2018-11-19 18:02:41
回答 1查看 435关注 0票数 1
代码语言:javascript
复制
type Dircory<T> {
  [key:string]: T
}

function colname(columns:Array<string> | string| Dictory<string>, name){
 if(Array.isArray(columns){
    return columns.map(column=>table_name + "." + columns);
 }else if(typeof columns == "string"){
    return table_name + "." + columns; 
 }else if(typeof columns == "object"){
    return columns as Dictory<string>
 }
}

这是我的代码,但是colname的返回类型总是Dictory<string>,无论传递什么类型,我应该如何正确地使用键值的类型保护

EN

回答 1

Stack Overflow用户

发布于 2018-11-19 18:11:11

问题不在于类型保护。如果希望函数返回相同类型的值,则需要具有多个重载,或者使用一个类型参数来捕获参数的实际类型并返回相同的类型参数:

代码语言:javascript
复制
type Dircory<T> = {
    [key: string]: T
}

let table_name;
function colname<T extends Array<string> | string | Dircory<string>>(columns: T, name: string) :T
function colname(columns: Array<string> | string | Dircory<string>, name) {
    if (Array.isArray(columns)) {
        return columns.map(column => table_name + "." + columns);
    } else if (typeof columns == "string") {
        return table_name + "." + columns;
    } else if (typeof columns == "object") {
        return columns as Dircory<string>
    }
}

let a = colname("A", ""); // string, actually the string literal type "A", but will work with strnig vars too 
let arr = colname(["A"], ""); // string[] 
let d = colname({a: "A"}, ""); // { a: string; }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53372216

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档