Javascript 如何从.ts文件中调用TypeScript函数?
我有一个非常简单的程序来学习如何使用TypeScript,我使用Browserify捆绑了我所有的Javascript 如何从.ts文件中调用TypeScript函数?,javascript,typescript,Javascript,Typescript,我有一个非常简单的程序来学习如何使用TypeScript,我使用Browserify捆绑了我所有的.ts文件,使其能够在浏览器中运行 想象一下TypeScript中非常简单的变量声明: main.ts let testVar = "Something"; 下面是我要编译的gulpfile.js(需要时打包文件): 这是我的tsconfig.json { "compilerOptions": { "module": "system", "sourceMap": true,
.ts
文件,使其能够在浏览器中运行
想象一下TypeScript中非常简单的变量声明:
main.ts
let testVar = "Something";
下面是我要编译的gulpfile.js
(需要时打包文件):
这是我的tsconfig.json
{
"compilerOptions": {
"module": "system",
"sourceMap": true,
"lib": ["dom", "es2015.promise", "es5"],
"noImplicitAny": true,
"target": "es2015"
},
"exclude": [
"node_modules"
],
"include": [
"src/**/*"
],
"files": [
"src/**/*"
]
}
构建任务按预期工作,我在typescript中的内容也工作得很好。但是,当我在.html文件中包含绑定和编译的文件,并试图访问testVar变量时。只需在Chrome控制台中轻松调用,console.log(testVar)代码>但返回错误:
未捕获引用错误:未定义testVar
下面是编译+捆绑的.js
文件:
(function e(t,n,r){function s(o,u){if(!n[o]){if(!t[o]){var a=typeof require=="function"&&require;if(!u&&a)return a(o,!0);if(i)return i(o,!0);var f=new Error("Cannot find module '"+o+"'");throw f.code="MODULE_NOT_FOUND",f}var l=n[o]={exports:{}};t[o][0].call(l.exports,function(e){var n=t[o][1][e];return s(n?n:e)},l,l.exports,e,t,n,r)}return n[o].exports}var i=typeof require=="function"&&require;for(var o=0;o<r.length;o++)s(r[o]);return s})({1:[function(require,module,exports){
let testVar = "Something";
},{}]},{},[1])
//# sourceMappingURL=main.js.map
代码>(函数e(t,n,n,r)若(t,t,n,n,r)若(t(t,t,n,n,r)若(t(t,t,n,n,n,r)若(t,n,n)若(t,n,n)若(t,n,n,r)若(t)若(t)若(t(t,n,n,n,n,r)若)若(t,(t,n,n,n,n,n,n,r)若)若(t,(t(t,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,r)若)若(t,(t)若(t,(t,n,n,(t,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n,n)若r)}返回n[o] .exports}var i=typeof require==“函数”&&require;for(var o=0;o
如何用TypeScript设计我的库的API?(任何好的资源)
这确实是一个构建工具链的问题。如果您想将库公开为全局库,答案取决于您的工具链。我建议使用webpack
。以下是一个示例配置:
module.exports = {
/** Build from built js file */
entry: {
typestyle: './lib/index.js',
},
output: {
filename: './umd/typestyle.js',
libraryTarget: 'umd',
/** The library name on window */
library: 'typestyle'
}
};
从
如何用TypeScript设计我的库的API?(任何好的资源)
这确实是一个构建工具链的问题。如果您想将库公开为全局库,答案取决于您的工具链。我建议使用webpack
。以下是一个示例配置:
module.exports = {
/** Build from built js file */
entry: {
typestyle: './lib/index.js',
},
output: {
filename: './umd/typestyle.js',
libraryTarget: 'umd',
/** The library name on window */
library: 'typestyle'
}
};
从.中,您的代码应该可以正常工作,您只需将standalone添加到Browserify配置中即可
这应该是您在Gulp上的Browserify任务:
return browserify({
standalone: "yourLib",
basedir: '.',
debug: true,
entries: ['src/main.ts'],
cache: {},
packageCache: {},
})
请看独立版:“yourLib”
现在您需要导出
main.ts
文件中的某些内容,例如:
//main.ts
export function whatsYourName(name:string){
console.log(name);
}
现在只需运行gulpbuild
任务(它将编译和浏览/捆绑您的ts文件),将捆绑的脚本包含到页面中,打开Chrome控制台(F12),在控制台选项卡内,只需在browserify
任务中写入您为独立
定义的名称(这里我们将其命名为yourLib
)
对于我们的示例,您只需在控制台中键入以下内容即可获得响应:
yourLib.whatsYourName("Alex");
您的代码应该按预期工作,您只需要将standalone添加到Browserify配置中 这应该是您在Gulp上的Browserify任务:
return browserify({
standalone: "yourLib",
basedir: '.',
debug: true,
entries: ['src/main.ts'],
cache: {},
packageCache: {},
})
请看独立版:“yourLib”
现在您需要导出
main.ts
文件中的某些内容,例如:
//main.ts
export function whatsYourName(name:string){
console.log(name);
}
现在只需运行gulpbuild
任务(它将编译和浏览/捆绑您的ts文件),将捆绑的脚本包含到页面中,打开Chrome控制台(F12),在控制台选项卡内,只需在browserify
任务中写入您为独立
定义的名称(这里我们将其命名为yourLib
)
对于我们的示例,您只需在控制台中键入以下内容即可获得响应:
yourLib.whatsYourName("Alex");
你确定变量名仍然是testVar,因为它看起来像是缩小了你的代码。@NicoVanBelle,是的,它仍然是testVar你确定变量名仍然是testVar,因为它看起来像是缩小了你的代码。@NicoVanBelle,是的,它仍然是testVar我们不能使用CommonJs/system,也不能访问变量和函数吗tions?我在TypeScript项目网站上找到了tsconfig和gulpfile配置,用于捆绑文件…但他们没有提到当我们包含在浏览器中时如何使用ts功能。你能描述更多吗?我看到人们谈论Commonjs模块,我的也是Commonjs,但它在浏览器中不工作,ou中没有错误t输出,但我不知道如何运行它!@TypeScriptLearner我也有同样的问题,请看我的答案,这解决了我的问题。@M98谢谢,我认为Web包中的libraryTarget与browserify中的standalone相同。难道我们不能使用CommonJs/system,也可以访问变量和函数吗?我找到了Tconfig和gulpfile从TypeScript项目网站上配置,用于捆绑文件…但是他们没有提到当我们包含在浏览器中时如何使用ts功能。你能描述更多吗?我看到人们谈论Commonjs模块,我的也是Commonjs,但它在浏览器中不工作,输出没有错误,但我不知道如何运行它!@typeScriptLearner我也遇到了同样的问题,请看我的答案,这解决了我的问题。@M98谢谢,我认为Webpack中的libraryTarget与browserify中的standalone相同。我是否能够向库中添加一个带有静态函数的类?我对JS和TypeScript不熟悉,想调用JS文件中的静态函数:
var test=MyClass.doSomething();
MyClass位于类似“MyClass.ts”的TypeScript文件中,将通过browserify进行捆绑和缩小。我是否能够将带有静态函数的类添加到库中?我对JS和TypeScript不熟悉,希望在我的JS文件中调用静态函数:var test=MyClass.doSomething();
MyClass位于类似“MyClass.ts”的类型脚本文件中,将通过browserify进行捆绑和缩小。