假设我有这样的代码:
function concat(a: string, b: string):string {
return a + b;
}
function firstPlusWorld(items: string[]):string {
return concat(items[0], ' World');
}
console.log(firstPlusWorld([]));
在这种情况下,打字稿不会认为传递给concat
的第一个参数不是字符串。
在功能区中有Maybe
类型,head
函数具有类型签名
head :: List a -> Maybe a
有没有办法让打字稿处理这种情况?
答案 0 :(得分:1)
不幸的是,您将不得不求助于良好/旧if
测试。在这方面,Typescript不会向javascript添加任何内容。
有一些尝试可以将Monads带到Javascript(和扩展名的Typescript),例如:https://github.com/fantasyland/fantasy-land(https://github.com/fantasyland用于实现)
我在这个阶段仍然感到沮丧,如果有人找到一个好的库,我会很高兴跳过它并为它编写打字稿定义文件,如果需要的话。
在数据结构和不变性方面,使用Immutable.js的事情要好一些,但将结构包装在Monads中会很好,因此可以更好地对它们进行操作。
答案 1 :(得分:0)
实际上,string
作为TypeScript类型也可以接受null
:
function concat(a: string, b: string):string {
return a + b;
}
concat(null, null);
这会回答你的问题吗?