TL; DR我想为已编译的PureScript模块创建TypeScript类型,并将其分布在我的npm包中。我很乐于手动维护这些类型,只是无法弄清楚需要在tsconfig.json(上下)和package.json中放入什么。
我有一个项目,其中的核心功能是使用TypeScript CLI在PureScript中实现的,所有这些最终都通过npm以JavaScript的形式分发。我用一个简单的布局创建了一个类似的项目:
.
??? cli # TypeScript CLI project
? ??? main.ts
? ??? tsconfig.json
?
??? output # Compiled PureScript modules
? ??? People
? ??? externs.json
? ??? index.js
?
??? src # PureScript source
? ??? People.purs
?
??? types # TypeScript types for PureScript modules
??? People.d.ts
Run Code Online (Sandbox Code Playgroud)
在src/People.purs我定义的核心功能:
module People where
type Person = { name :: String }
david :: Person
david = { name: "David …Run Code Online (Sandbox Code Playgroud) 在Haskell中,我使用Data.Map模块及其相同名称的主要类型Data.Map.Map,如下所示:
import Data.Map (Map)
import qualified Data.Map as M
Run Code Online (Sandbox Code Playgroud)
在F#中,我想做一些与我的Item模块类似的东西,它包含一个相同名称的类型:
module Item
type Item = { Description: string }
let empty = { Description = "" }
Run Code Online (Sandbox Code Playgroud)
我找不到使用此模块的方法合格且类型不合格.我可以使用此模块并从另一个模块中这样输入吗?
let getItem (): Item = Item.empty
Run Code Online (Sandbox Code Playgroud)
编辑:
从客户端模块添加类型别名让我可以使用Item具有资格的模块和Item没有资格的类型,但还有更好的方法吗?
type Item = Item.Item
Run Code Online (Sandbox Code Playgroud) 为什么不用这个C#typecheck?在这个例子中,我试图传递一个类型的方法string -> string作为Func<string, string>.在传递适当类型的函数的名称时,能够省略lambda语法似乎是完全合理的.
using System;
using System.Linq;
class WeakInference
{
public static void Main (string [] args)
{
// doesn't typecheck
var hellos = args.Select (AppendHello);
// have to do this:
// var hellos = args.Select (s => AppendHello (s));
}
static string AppendHello (string s)
{
return s + "hello";
}
}
Run Code Online (Sandbox Code Playgroud)