我试图确定以下想法的现有技术:
1)用户在一些代码中键入一个名为(insert_name_here)的语言;
2)用户从众所周知的输出候选列表(javascript,ruby,perl,python)中选择目标语言;
3)处理器将insert_name_here转换为目标语言的可运行代码;
4)然后处理器使用基于所选语言的相关系统调用来运行代码
这样做的原因是因为从insert_name_here到所有支持的目标语言的所有语言结构之间存在预先建立的1对1映射.
(免责声明:这显然不会产生针对目标语言量身定制的"优雅"代码.它只是进行可运行的基本翻译.目的是允许开发人员快速实现算法的实现.几种不同的语言,用于那些他们不想重新发明轮子的情况,但无论出于何种原因都需要使用特定项目的特定语言.)
这已经存在了吗?
我对所有扩展抽象类的子类使用依赖项注入。
在抽象构造函数类中,如果需要的话,我启动了一个计划在其子级中覆盖的方法。
我陷入了一个问题,即从super启动的重写类中看不到注入的依赖项。
这是代码示例:
abstract class Base {
constructor(view: string) {
this._assemble();
}
protected _assemble(): void {
console.log("abstract assembling for all base classes");
}
}
class Example extends Base {
constructor(view: string, private helper: Function) {
super(view);
console.log(this.helper);
}
public tryMe(): void {
this._assemble();
}
protected _assemble(): void {
super._assemble();
// at first run this.helper will be undefined!
console.log("example assembling", this.helper);
}
}
let e = new Example("hoho", function () { return; })
console.log("So now i will try to reassemble..."); …Run Code Online (Sandbox Code Playgroud) 假设我有一个 TypeScript 1.6 文件,其中包含这一行,其中包含 JSX (TSX):
var a = (<div></div>);
Run Code Online (Sandbox Code Playgroud)
当我使用 TypeScript 1.6(通过 ntypescript npm 包安装)在命令行上编译它时:
ntsc --jsx react test.tsx
Run Code Online (Sandbox Code Playgroud)
它产生预期的输出:
more test.js
var a = (React.createElement("div", null));
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试使用 TypeScript JS API 做同样的事情时,我无法让它工作。我运行node然后运行这些命令:
var ts = require('ntypescript');
src = 'var a = (<div></div>);'
d = []; // for diagnostics
compilerOptions = {jsx: 'react', module: ts.ModuleKind.CommonJS};
res = ts.transpile(src, compilerOptions, 'test.tsx', d);
Run Code Online (Sandbox Code Playgroud)
我得到的结果是:
'var a = (<div></div>);\n'
Run Code Online (Sandbox Code Playgroud)
此外,d它是一个空数组,因此没有报告任何诊断消息(即错误)。是什么赋予了?
我知道 ES6 和 TypeScript 都支持块级作用域,但是当针对 ES3 和 ES5 时,输出应该是函数级作用域。我认为 TypeScript 不提升变量背后一定有一个逻辑......而且我没有遇到问题,我只是好奇它为什么不提升变量。
例如,给定以下 TypeScript:
function seed(length: number, multiplier: number): number[] {
let result: number[] = [];
for(let i: number = 0; i < length; i++) {
let n: number = i * multiplier;
result.push(n);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
转译器输出:
function seed(length, multiplier) {
var result = [];
for (var i = 0; i < length; i++) {
var n = i * multiplier;
result.push(n);
}
return result;
}
Run Code Online (Sandbox Code Playgroud)
我预期的结果是变量声明被提升到函数顶部。看起来像这样:
function seed(length, …Run Code Online (Sandbox Code Playgroud) 我在TypeScript中编写了以下函数
function initializeTasksPerUserJSON(task)
{
const tasksPerUser = {
'username': task.mantisUsername,
'duration_minutes': task.mantisBugNoteDurationSum,
'categories': {
[task.mantisBugCategoryName]: initializeTaskCategoriesJSON(task)
}
};
return tasksPerUser;
}
Run Code Online (Sandbox Code Playgroud)
这转化为以下JavaScript
function initializeTasksPerUserJSON(task) {
var tasksPerUser = {
'username': task.mantisUsername,
'duration_minutes': task.mantisBugNoteDurationSum,
'categories': (_a = {},
_a[task.mantisBugCategoryName] = initializeTaskCategoriesJSON(task),
_a
)
};
return tasksPerUser;
var _a;
}
Run Code Online (Sandbox Code Playgroud)
我不明白var _a;返回语句应该完成什么.这对我来说似乎没有意义,因为该行永远不会被执行.这是TypeScript中的错误,还是有更深层的含义?
我正在使用没有任何编译器标志的tsc版本1.8.10.
我只是按照这些说明努力让我的应用程序加载我的应用程序(它挂在启动画面上).
总之,我这样做了:
npm install -g ionic@latest
npm install ionic-angular@3.7.0 --save
npm install @ionic/app-scripts@3.0.0 --save-dev
npm install @angular/core@4.4.3 --save
npm install @angular/common@4.4.3 --save
npm install @angular/compiler@4.4.3 --save
npm install @angular/compiler-cli@4.4.3 --save
npm install @angular/forms@4.4.3 --save
npm install @angular/http@4.4.3 --save
npm install @angular/platform-browser@4.4.3 --save
npm install @angular/platform-browser-dynamic@4.4.3 --save
npm install rxjs@5.4.3 --save
npm install zone.js@0.8.17 --save
Run Code Online (Sandbox Code Playgroud)
现在,当我跑步时,ionic package build ios我得到这些错误:
[14:21:32] typescript: node_modules/@angular/platform-browser/animations/src/animation_builder.d.ts, line: 8
Module '"/Users/eamonwhite/ionicmane/myApp/node_modules/@angular/animations/animations"' has no exported
member 'AnimationBuilder'.
L7: constructor(rootRenderer: RendererFactory2, doc: any);
L8: …Run Code Online (Sandbox Code Playgroud) 我目前正在为mongoose编写一个插件。现在,当我使用 TypeScript 时,我遇到了以下情况。我必须扩展现有的接口。这没有问题。为了完整起见,我还是会写下来
src/typings/mongoose.d.ts
declare module 'mongoose' {
export interface SomeExistingMongooseInterface {
MyNewOption?: FancyOptionInterface
}
}
Run Code Online (Sandbox Code Playgroud)
将通过声明合并扩展现有接口
我在 tsconfig 中包含了 typeRoot
配置文件
"compilerOptions" : {
...
"typeRoots": {
"src/types",
"node_modules/@types"
}
}
Run Code Online (Sandbox Code Playgroud)
在构建我的 npm 模块时,我也使用 --declare 标志来导出类型。现在的问题是,找不到自定义类型。当然,我可以手动将它的内容添加到我的 . /dist/index.d.ts可以工作,但这不是一个真正的选择,因为它不能自动化并且会给错误留下很大的空间。
是否有任何最佳实践可以与打字稿编译器或至少可以处理此问题的 npm 模块一起使用?
我知道 Scala.js 可以转译为 JS,但它不支持反射。有什么方法可以解释用户提供的 Scala 代码而不重复到服务器端?
如果以这种方式解释 Scala 是不可能的,是否可以从 Scala 代码(即从将被转译的 Scala 代码)运行用户提供的 JavaScript 代码?
我\xe2\x80\x99 已经使用 Typescript 一段时间了。我们在前端 Web 组件中使用本地化,并且我们有自己的实现。
\n因此,我们有一个翻译文件夹,其中包含所有以翻译作为键值对的语言环境文件。
\n我们使用区域设置文件根据用户从浏览器中选择的语言加载翻译文件。
\n我们通过动态导入来加载语言环境:
\n{\n 'component': locale => import(`./translations/${locale}.ts`),\n},\nRun Code Online (Sandbox Code Playgroud)\n虽然当我们使用扩展时一切正常,.js但当我们使用 时.ts,tsc无法转译这部分代码。
我希望构建是这样的:
\n{\n 'component': locale => import(`./translations/${locale}.js`),\n},\nRun Code Online (Sandbox Code Playgroud)\n有人知道这是为什么吗?
\n考虑到Node v6.x对ES2015规范的覆盖率约为93%,是否需要进行Babel转换?
我正在使用Node v6和Express创建一个Web应用程序.如果这只是一个Node应用程序,我不会想到Babel,但考虑到也会有一些客户端JS,我认为我应该编译静态JS文件.这是正确的假设吗?
如果需要,一个例子.babelrc是什么?
目前,我在想:
{
"presets": [
"node6",
"es2015"
]
}
Run Code Online (Sandbox Code Playgroud) transpiler ×10
typescript ×6
javascript ×5
node.js ×2
angular ×1
babeljs ×1
build ×1
ecmascript-6 ×1
interface ×1
ios ×1
pseudocode ×1
reactjs ×1
reflection ×1
scala ×1
scala.js ×1
translation ×1
tsc ×1