我有一些函数,我需要函数结果类型的union类型。
输入函数类型:
type InputType1 = () => {type: "INCREASE"}
type InputType2 = () => {type: "ADD", by: number}
输出类型:
type ResultType = {type: "INCREASE"} | {type: "ADD", by: number}
我目前的代码非常详细,但看起来像这样:
function returntypeof<RT>(expression: (...param: any[]) => RT): RT {
return {} as RT;
}
const AllTypes = {
1: returntypeof(InputType1),
2: returntypeof(InputType2),
};
type ResultType = typeof AllTypes[keyof typeof AllTypes];
答案 0 :(得分:1)
在variadic可用之前(并想出如何做到这一点),现在你可以试试这个:
blockchain@blockchain-VirtualBox:~/embark$ embark demo
Initializing Embark Template....
Installing packages.. this can take a few seconds
Init complete
App ready at ./embark_demo
-------------------
next steps:
-> cd ./embark_demo
-> embark blockchain or embark simulator
open another console in the same directory and run
-> embark run
For more info go to http://github.com/iurimatias/embark-framework
blockchain@blockchain-VirtualBox:~/embark$ cd embark_demo/
blockchain@blockchain-VirtualBox:~/embark/embark_demo$ embark blockchain
===============================================================================
===============================================================================
Embark Blockchain Using: Go-Ethereum (https://github.com/ethereum/go-ethereum)
===============================================================================
===============================================================================
running: geth --networkid 12301 --datadir=".embark/development/datadir" --password config/development/password account list
WARN [04-18|17:44:26] No etherbase set and no accounts found as default
already initialized
/usr/local/lib/node_modules/embark/node_modules/solc/soljson.js:1
(function (exports, require, module, __filename, __dirname) { var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filena
TypeError: Cannot read property '1' of null
at Blockchain.initChainAndGetAddress (/usr/local/lib/node_modules/embark/lib/blockchain.js:69:45)
at Blockchain.run (/usr/local/lib/node_modules/embark/lib/blockchain.js:41:22)
at Object.blockchain (/usr/local/lib/node_modules/embark/lib/index.js:195:16)
at Command.<anonymous> (/usr/local/lib/node_modules/embark/lib/cmd.js:95:17)
at Command.listener (/usr/local/lib/node_modules/embark/node_modules/commander/index.js:301:8)
at emitTwo (events.js:106:13)
at Command.emit (events.js:191:7)
at Command.parseArgs (/usr/local/lib/node_modules/embark/node_modules/commander/index.js:615:12)
at Command.parse (/usr/local/lib/node_modules/embark/node_modules/commander/index.js:458:21)
at Cmd.process (/usr/local/lib/node_modules/embark/lib/cmd.js:19:11)
at Object.process (/usr/local/lib/node_modules/embark/lib/index.js:35:9)
at Object.<anonymous> (/usr/local/lib/node_modules/embark/bin/embark:4:8)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
at Module.runMain (module.js:605:10)
at run (bootstrap_node.js:420:7)
at startup (bootstrap_node.js:139:9)
at bootstrap_node.js:535:3
blockchain@blockchain-VirtualBox:~/embark/embark_demo$ ^C
blockchain@blockchain-VirtualBox:~/embark/embark_demo$ sudo apt-get update
Hit:1 http://ppa.launchpad.net/ethereum/ethereum/ubuntu xenial InRelease
Get:2 http://security.ubuntu.com/ubuntu xenial-security InRelease [102 kB]
Hit:3 http://ca.archive.ubuntu.com/ubuntu xenial InRelease
Get:4 http://ca.archive.ubuntu.com/ubuntu xenial-updates InRelease [102 kB]
Get:5 http://ca.archive.ubuntu.com/ubuntu xenial-backports InRelease [102 kB]
Fetched 306 kB in 0s (317 kB/s)
Reading package lists... Done
blockchain@blockchain-VirtualBox:~/embark/embark_demo$ cd ..
blockchain@blockchain-VirtualBox:~/embark$ sudo rm -r embark_demo/
blockchain@blockchain-VirtualBox:~/embark$ embark demo
Initializing Embark Template....
Installing packages.. this can take a few seconds
Init complete
App ready at ./embark_demo
-------------------
next steps:
-> cd ./embark_demo
-> embark blockchain or embark simulator
open another console in the same directory and run
-> embark run
For more info go to http://github.com/iurimatias/embark-framework
blockchain@blockchain-VirtualBox:~/embark$ cd embark_demo/
blockchain@blockchain-VirtualBox:~/embark/embark_demo$ embark blockchain
===============================================================================
===============================================================================
Embark Blockchain Using: Go-Ethereum (https://github.com/ethereum/go-ethereum)
===============================================================================
===============================================================================
running: geth --networkid 12301 --datadir=".embark/development/datadir" --password config/development/password account list
WARN [04-18|17:45:59] No etherbase set and no accounts found as default
already initialized
/usr/local/lib/node_modules/embark/node_modules/solc/soljson.js:1
(function (exports, require, module, __filename, __dirname) { var Module;if(!Module)Module=(typeof Module!=="undefined"?Module:null)||{};var moduleOverrides={};for(var key in Module){if(Module.hasOwnProperty(key)){moduleOverrides[key]=Module[key]}}var ENVIRONMENT_IS_WEB=typeof window==="object";var ENVIRONMENT_IS_WORKER=typeof importScripts==="function";var ENVIRONMENT_IS_NODE=typeof process==="object"&&typeof require==="function"&&!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_WORKER;var ENVIRONMENT_IS_SHELL=!ENVIRONMENT_IS_WEB&&!ENVIRONMENT_IS_NODE&&!ENVIRONMENT_IS_WORKER;if(ENVIRONMENT_IS_NODE){if(!Module["print"])Module["print"]=function print(x){process["stdout"].write(x+"\n")};if(!Module["printErr"])Module["printErr"]=function printErr(x){process["stderr"].write(x+"\n")};var nodeFS=require("fs");var nodePath=require("path");Module["read"]=function read(filename,binary){filename=nodePath["normalize"](filename);var ret=nodeFS["readFileSync"](filena
TypeError: Cannot read property '1' of null
at Blockchain.initChainAndGetAddress (/usr/local/lib/node_modules/embark/lib/blockchain.js:69:45)
at Blockchain.run (/usr/local/lib/node_modules/embark/lib/blockchain.js:41:22)
at Object.blockchain (/usr/local/lib/node_modules/embark/lib/index.js:195:16)
at Command.<anonymous> (/usr/local/lib/node_modules/embark/lib/cmd.js:95:17)
at Command.listener (/usr/local/lib/node_modules/embark/node_modules/commander/index.js:301:8)
at emitTwo (events.js:106:13)
at Command.emit (events.js:191:7)
at Command.parseArgs (/usr/local/lib/node_modules/embark/node_modules/commander/index.js:615:12)
at Command.parse (/usr/local/lib/node_modules/embark/node_modules/commander/index.js:458:21)
at Cmd.process (/usr/local/lib/node_modules/embark/lib/cmd.js:19:11)
at Object.process (/usr/local/lib/node_modules/embark/lib/index.js:35:9)
at Object.<anonymous> (/usr/local/lib/node_modules/embark/bin/embark:4:8)
at Module._compile (module.js:571:32)
at Object.Module._extensions..js (module.js:580:10)
at Module.load (module.js:488:32)
at tryModuleLoad (module.js:447:12)
at Function.Module._load (module.js:439:3)
at Module.runMain (module.js:605:10)
at run (bootstrap_node.js:420:7)
at startup (bootstrap_node.js:139:9)
at bootstrap_node.js:535:3