{
"node" => "PropTypes.node",
"bool" => "PropTypes.bool",
"boolean" => "PropTypes.bool",
"string" => "PropTypes.string",
"number" => "PropTypes.number",
"object" => "PropTypes.object",
"array" => "PropTypes.array",
"shape" => "PropTypes.shape({})",
"element" => "PropTypes.element",
"func" => "PropTypes.func",
"function" => "PropTypes.func",
"any" => "PropTypes.any",
"instanceOf" => lambda { |type|
"PropTypes.instanceOf(#{type.to_s.camelize})"
},
"oneOf" => lambda { |*options|
enums = options.map { |k| "'#{k}'" }.join(",")
"PropTypes.oneOf([#{enums}])"
},
"oneOfType" => lambda { |*options|
types = options.map { |k| lookup(k.to_s, k.to_s).to_s }.join(",")
"PropTypes.oneOfType([#{types}])"
}
}.freeze
{
"node" => "React.ReactNode",
"bool" => "boolean",
"boolean" => "boolean",
"string" => "string",
"number" => "number",
"object" => "object",
"array" => "Array<any>",
"shape" => "object",
"element" => "object",
"func" => "object",
"function" => "object",
"any" => "any",
"instanceOf" => lambda { |type|
type.to_s.camelize
},
"oneOf" => lambda { |*opts|
opts.map { |k| "'#{k}'" }.join(" | ")
},
"oneOfType" => lambda { |*opts|
opts.map { |k| ts_lookup(k.to_s, k.to_s).to_s }.join(" | ")
}
}.freeze