如何运行TypeScript文件?

时间:2018-04-17 12:05:17

标签: typescript

众所周知,Angular 4+应用程序是使用TypeScript构建的。

当我们在命令行中为这些应用程序键入ng serve时,应用程序将在浏览器中运行并响应我们的更改,而不会在我们的项目中创建任何.js个文件。

假设我有一个文件myscript.ts,它存在于Angular应用程序之外。如何为此创建监视方案,以便文件在Node中运行,但我不必创建新文件?

显然,案例不是必须将文件编译成JavaScript文件。我们可以看到运行ng serve时没有创建新文件。

1 个答案:

答案 0 :(得分:2)

  

显然没有在我们的项目中创建任何public class MyAdapter extends RecyclerView.Adapter<MyHolder> { Context c; ArrayList<Article> articles; public MyAdapter(Context c, ArrayList<Article> articles) { this.c = c; this.articles = articles; } @Override public MyHolder onCreateViewHolder(ViewGroup parent, int viewType) { View v= LayoutInflater.from(c).inflate(R.layout.model,parent,false); return new MyHolder(v); } @Override public void onBindViewHolder(MyHolder holder, int position) { Article article=articles.get(position); holder.titleTxt.setText(article.getTitle()); holder.descTxt.setText(article.getDescription()); holder.dateTxt.setText(article.getDate()); holder.gimage.setImageURI(Uri.parse(article.getImage())) ; } @Override public int getItemCount() { return articles.size(); } } 个文件。

有时JS只需要存在于内存中,因此不一定在文件系统上创建实际的public class RSSParser extends AsyncTask<Void,Void,Boolean> { Context c; InputStream is; RecyclerView rv; ProgressDialog pd; ArrayList<Article> articles=new ArrayList<>(); public RSSParser(Context c, InputStream is, RecyclerView rv) { this.c = c; this.is = is; this.rv = rv; } @Override protected void onPreExecute() { super.onPreExecute(); pd=new ProgressDialog(c); pd.setTitle("Parse data"); pd.setMessage("Parsing data...Please wait"); pd.show(); } @Override protected Boolean doInBackground(Void... params) { return this.parseRSS(); } @Override protected void onPostExecute(Boolean isParsed) { super.onPostExecute(isParsed); pd.dismiss(); if(isParsed) { //Bind rv.setAdapter(new MyAdapter(c,articles)); }else { Toast.makeText(c,"Unable To Parse", Toast.LENGTH_SHORT).show(); } } private Boolean parseRSS() { try { XmlPullParserFactory factory=XmlPullParserFactory.newInstance(); XmlPullParser parser=factory.newPullParser(); parser.setInput(is, null); int event=parser.getEventType(); String value=null; articles.clear(); Article article=new Article(); do { String name=parser.getName(); switch (event) { case XmlPullParser.START_TAG: if(name.equals("item")) { article=new Article(); } break; case XmlPullParser.TEXT: value=parser.getText(); break; case XmlPullParser.END_TAG: if(name.equals("title")) { article.setTitle(value); } else if(name.equals("description")) { article.setDescription(value); }else if(name.equals("pubDate")) { article.setDate(value); }else if(name.equals("date")) { article.setDate(value); }else if(name.equals("image")) { article.setImage(value) ; } if(name.equals("item")) { articles.add(article); } break; } event=parser.next(); }while (event != XmlPullParser.END_DOCUMENT); return true; } catch (XmlPullParserException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return false; } } 文件,但编译器正在进行将.js文件转换为JS的工作。 ,这就是为浏览器提供的服务。浏览器只运行JavaScript。但是,为了使其更加不透明,浏览器可以处理language-ext,将正在运行的JavaScript映射回任何原始源文件(在本例中为.js文件),因此在您的开发控制台中它看起来很像浏览器正在运行TypeScript,但实际上它正在运行映射到原始TypeScript源文件的JavaScript。

  

如何为此创建监视方案,以便文件在Node中运行,但我不必创建新文件?

您可以使用source maps。来自文档:

  

TypeScript Node 的工作原理是为.ts注册TypeScript编译器   和.ts扩展名(.tsx?时)。当node.js有一个   扩展注册(通过.jsx?),它将使用   内部扩展用于模块解析。当扩展名是   node.js不知道,它将文件处理为allowJs == true(JavaScript)。