有条件地返回包装的或基本类型

时间:2019-05-05 22:25:41

标签: typescript

我刚接触打字稿,因此很难找到合适的关键字组合来进行搜索。我认为我需要使用类型条件,但是我还不太了解它们如何工作。

我想做的是传递一个执行某种操作的函数。如果该函数返回特定类型,那么我想将其包装在一个框中,否则返回原始值。

例如:

class Box<T> {
    value: T;
    constructor(value: T) {
        this.value = value;
   }
}

function wrapIfString<T, TResult>(fn: (value: T) => TResult, value: T): 
   TResult extends string ? Box<string> : TResult {

   const result = fn(value);
   if (value instanceof String) {
       return new Box<string>(result);
   }

   return result;
}

但这无法编译。这是我可以在打字稿中做的事情吗?

1 个答案:

答案 0 :(得分:1)

希望这会有所帮助。...有条件的返回类型通常会导致类似这样的问题,那就是它比可能的清理器更容易像这样重载...

convert img.jpg -resize 210x127^ -gravity center -extent 210x127 -write mpr:img +delete -size 630x380 tile:mpr:img result2.png