我有一个旧版* .js应用程序,想将其部分移植到打字稿上。
到目前为止,我已经为大多数使用的软件包找到了@types定义,但是在window对象中添加了一个全局函数。
我能够通过在* .ts文件开头添加addind来解决编译错误:
declare global {
interface Window {
openConformationModal?: any;
}
}
Run Code Online (Sandbox Code Playgroud)
现在,我不想在我所有的* .ts中都包含它,所以我想将其添加到* .d.ts文件中,以便在所有软件包中都可以识别它。
问题是,如果我将同一文件添加到例如window.d.ts文件,则无法识别该文件。我知道找到了文件夹中的类型,因为我添加了
{
...,
"compilerOptions": {
....
"typeRoots": [
"FFOLDERPATH_TO_D_TS_FILE"
]
}
}
Run Code Online (Sandbox Code Playgroud)
并且找到另一个* .d.ts。
PS:解决方案基于您如何在TypeScript中的“ window”上显式设置新属性?
不幸的是,关于这个库的信息很少。安装后我还不太清楚我需要将哪些内容导入到app.module.ts中,以及是否有要导入的内容?我在index.html中规定了以下代码:
<script type="text/x-mathjax-config">
MathJax.Hub.Config({
tex2jax: {
inlineMath: [['$','$'], ['\\(','\\)']]
}
});
</script>
<script type="text/javascript" async
src='https://cdnjs.cloudflare.com/ajax/libs/mathjax/2.7.5/latest.js?
config=TeX-MML-AM_CHTML'>
</script>
Run Code Online (Sandbox Code Playgroud)
如果我没有简单的文本,但是在某些列中出现带有公式的文本的表,该如何应用MathJax?也许您可以以某种方式将整个表转移到MathJax.Hub.Queue?
通过创建如下界面,我能够在TypeScript中运行SpeechRecognition,并且工作正常:
namespace CORE{
export interface IWindow extends Window{
webkitSpeechRecognition: any;
}
}
Run Code Online (Sandbox Code Playgroud)
我尝试对SpeechSynthesis使用相同的方式,但是在字段中,以下代码不起作用:
namespace CORE{
export interface IWindow extends Window{
SpeechSynthesisUtterance: any;
speechSynthesis: any;
}
}
Run Code Online (Sandbox Code Playgroud)
我的问题是:
SpeechRecognitionTypeScript的最佳实践,还是有更好的方法。
SpeechSynthesis在TypeScript中使用。供参考,以下是我的工作代码SpeechRecognition:
namespace CORE{
export interface IWindow extends Window{
webkitSpeechRecognition: any;
}
}
namespace CORE{
export class speakRecognation{
// spoken:string;
constructor(input:HTMLInputElement){
var audio = new Audio('/sounds/sound.mp3');
//Voice recognition
const {webkitSpeechRecognition}: IWindow = <IWindow>window;
const recognition = new webkitSpeechRecognition();
recognition.continuous = false;
recognition.interimResults = true;
input.addEventListener("click", function(){ …Run Code Online (Sandbox Code Playgroud) 如果您使用typescript编写,并且未使用模块,则可以扩展全局Window对象.例如,这编译:
interface Window {
myCounter: number;
}
window.myCounter = window.myCounter || 0;
++window.myCounter;
function outputLoadingDetails() {
console.log(`myCounter= ${window.myCounter}`)
}
Run Code Online (Sandbox Code Playgroud)
但是,如果我前缀功能outputLoadingDetails有export,看来我这个文件转换成一个模块.我现在访问时遇到编译器错误window.myCounter.
interface Window {
myCounter: number;
}
window.myCounter = window.myCounter || 0; // ERROR: property 'MyCounter' does not exist on type `Window`
++window.myCounter; // ERROR: property 'MyCounter' does not exist on type `Window`
export function outputLoadingDetails() {
console.log(`myCounter= ${window.myCounter}`) // ERROR: property 'MyCounter' does not exist on type `Window`
}
Run Code Online (Sandbox Code Playgroud)
看来我的接口声明不再扩展全局Window类型. …
Web3.js web3进入window对象。
浏览器钱包就像MetaMask注入ethereum到window对象中。
现在在打字稿中以减轻编译错误,我正在按如下方式进行转换 (window as any).ethereum
在查看Web3存储库和钱包存储库(例如 MetaMask)后,该Window对象没有可导入/可复制的打字稿定义/接口。
一个可能的解决方案是编写我自己的接口并扩展 Window,查看 Window 对象并尝试推断类型 - 不理想
其他使用过 web3.js 和 typescript 的开发者,你们是如何克服 VSCode 中的 Window 类型界面问题和智能感知建议的?
假设我在页面中插入了一个外部javascript,它将一些东西导出到外部作用域(即将它们绑定到窗口).
我想在我的打字稿项目中调用其中一些属性:
UndeclaredExportedProperty.aFunction()
Run Code Online (Sandbox Code Playgroud)
但是打字稿不允许我编译那个> <
我不想通过一种复杂的方式来声明模块的整个界面,因为我不知道它,坦率地说我并不关心它.它只是一个模块,我必须调用一次并"信任",当我调用它加载并包含正确的元素时(它非关键,所以不调用它不会让世界着火).
使用打字稿最简单的方法是什么?
编辑以响应标记为重复:
虽然这个问题的答案确实解决了我的问题,但问题是不同的(例如堆栈无法将其作为重复的建议)并且我觉得我正在尝试做什么Pokus的答案是更直接的一般解决方案而不是那个问题的答案
话虽这么说,如果管理员觉得这仍然是重复或简单的问题随时删除/关闭,因为我得到了我的答案.就个人而言,我会留下它,因为通过谷歌搜索的下一个人可能会更容易找到答案.
我的 Angular 应用程序 data.js 中有一个 js 文件。这个 js 文件中声明了一些变量,如下所示。
var data = 'test'
Run Code Online (Sandbox Code Playgroud)
现在我必须在我的组件 (app.component.ts) 中访问这些变量及其值。
我读了一些将它们声明为导出使它们成为模块并且可以在任何地方访问的地方,但我不确定如何做到这一点。
这是我的应用程序的结构。我在assets->js文件夹中有data.js。我需要修改app.component.ts中的变量值。
我对 Angular 很陌生。这甚至可能吗?
我尝试在我的旧 AngularJS 项目上开始使用 TypeScript 2.4.1。首先,我尝试将我的简单控制器重构为 ts。在控制器上,我在编译过程中使用匿名函数获取Error:(35, 11) TS2339:Property 'app' does not exist on type 'Window'.
(function (app) {
'use strict';
app.ReservationModule.controller('ItineraryController', ItineraryController);
ItineraryController.$inject = [
'SeatMapService',
'SeatMapSegments'
];
/**
* Controlling interaction between seatMap service and Itinerary view.
*/
function ItineraryController(SeatMapService:any, SeatMapSegments:any) {
const vm = this;
vm.deselectService = deselectService;
vm.show = show;
/**
* Deselect traveller seat on seatMap service by segment.
*/
function deselectService(traveller, segment) {
SeatMapService.deselectService(traveller, segment);
}
/**
* Returns true if segment has new …Run Code Online (Sandbox Code Playgroud) 如何在 Typescript 中完成这项工作?
window.open(externalUrl, '_blank').focus();
这会引发以下打字稿错误:
Object is possibly 'null'.ts(2531)
我试过这个,但它不起作用:
if (typeof window != 'undefined' && window && externalUrl !== '' && window.open(externalUrl, '_blank') ) {
window.open(externalUrl, '_blank').focus();
}
Run Code Online (Sandbox Code Playgroud) typescript ×7
angular ×2
javascript ×2
angular5 ×1
angular6 ×1
angularjs ×1
ecmascript-6 ×1
ecmascript-7 ×1
ethereum ×1
mathjax ×1
webpack ×1