首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

旧项目TypeScript改造问题与解决方案记

TypeScript相关 对象属性赋值报错 在JavaScript中,我们经常会声明一个空对象,然后再给这个属性进行赋值。...这也是因为TypeScript不允许增加没有声明的属性导致的。 由于我们没有办法声明windows属性的值(或者说很困难),因此我们需要通过下面这一种方式来解决: 1..../session'; // 报错 export * from '_models/read-item'; // 不报错 而在TypeScript中,这种写法是会报错的: 终端编译报错:TS1128: Declaration...编辑器报错:[ts] 应为声明语句。 这是由于两者的模块语法不一样导致的。 因此,我们解决这个问题只需要用下面这一种方法: 1....我们可以通过如下方法来添加声明文件: 1. 增加@types文件。这个方式针对于一些比较出名的类库可以使用此方法。 2. 在.d.ts文件中增加声明,这个声明全局有效。

5K10
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    深度讲解TS:这样学TS,迟早进大厂【12】:声明文件

    什么是声明文件§ 通常我们会把声明语句放到一个单独的文件(jQuery.d.ts)中,这就是声明文件3: // src/jQuery.d.ts declare var jQuery: (selector...需要注意的是,声明语句中只能定义类型,切勿在声明语句中定义具体的实现5: declare const jQuery = function(selector) { return document.querySelector...; // src/index.ts jQuery('#foo'); 在函数类型的声明语句中,函数重载也是支持的6: // src/jQuery.d.ts declare function jQuery...在类型声明文件中,我们可以直接使用 interface type 来声明一个全局的接口类型12: // src/jQuery.d.ts interface AjaxSettings {...如果没有指定 types typings,那么就会在根目录下寻找 index.d.ts 文件,将它视为此库的类型声明文件。

    5.3K51

    typescript声明文件:全局变量模块拆分自动生成声明文件

    什么是声明文件通常我们会把声明语句放到一个单独的文件(jQuery.d.ts)中,这就是声明文件3:// src/jQuery.d.tsdeclare var jQuery: (selector: string...需要注意的是,声明语句中只能定义类型,切勿在声明语句中定义具体的实现5:declare const jQuery = function(selector) {    return document.querySelector...由于是通过 import 语句导入的模块,所以声明文件存放的位置也有所约束,一般有两种方案:创建一个 node_modules/@types/foo/index.d.ts 文件,存放 foo 模块的声明文件...如果是手动写的声明文件,那么需要满足以下条件之一,才能被正确的识别:给 package.json 中的 types typings 字段指定一个类型声明文件地址在项目根目录下,编写一个 index.d.ts...如果没有指定 types typings,那么就会在根目录下寻找 index.d.ts 文件,将它视为此库的类型声明文件。

    3.2K11

    TypeScript: 思考类型使用具体情节

    TS中,他们在类型声明上下文中,则指代接口定义: interface String { /** Returns a string representation of a string. */...而在类型声明上下文中,String则指的就是这个interface String。 2.1.1 Object 其实也是一个接口声明,可以去看看 ts 源代码的 Object 是怎么声明的。...与{}类似,同样没有任何成员属性方法可以访问!...将void用户变量声明,则只能为其赋予nullundefined。 4.1.3 never never用于函数返回值时,表示函数有抛出异常,没有正常执行到底。用于变量声明,无法为其赋予任何值!...在函数表达式箭头函数没有返回类型注解时,如果函数没有return语句,或者只有never类型表达式的return语句,并且如果函数是不可执行到终点的(例如通过控制流分析决定的),则推断函数的返回类型是

    57820

    你不知道的 「 import type 」

    同时,这也存在另外一个问题,TypeScript 导入省略将会去除只包含用于类型声明的导入语句。 对于含有副作用的模块,这造成了明显的不同行为。...于是,使用者将会不得不添加一条额外的声明语句,来确保有副作用。.../some-module.js"; export type { SomeThing }; import type 仅仅导入被用于类型注解声明声明语句,它总是会被完全删除,因此在运行时将不会留下任何代码...remove,这是现在的行为 —— 丢弃这些导入语句。这仍然是默认行为,没有破坏性的更改 preserve,它将会保留所有的语句,即使是从来没有被使用。它可以保留副作用。...现在,编译器(无论是tsc,babel还是其他)都将能够查看单个文件,并取消导入导出(如果它是TypeScript类型)。

    4.3K61

    TypeScript 入门

    使用 node 命令来执行 index.js 文件 node index.js 6.ts-node 的安装和使用 使用 ts-node 插件,不用再编译,而使用 ts-node 就可以直接看到编写结果...全局安装 npm install -g ts-node 使用 ts-node index.ts 基础知识 1.TypeScript 程序由以下几个部分组成 模块 函数 变量 语句和表达式 注释 2...4.分号是可选的 每行指令都是一段语句,你可以使用分号不使用, 分号在 TypeScript 中是可选的,建议使用。 如果语句写在同一行则一定需要使用分号来分隔,否则会报错。...值空间与类型空间 只包含类型声明的 namespace 不会产生 JS 代码,不会引入变量 instanceof 操作符只作用于值空间 如何判断符号是在哪个空间?...&| 运算符 在值空间表示 “按位与” 和 “按位” (Bitwise AND,OR) 在类型空间表示类型的交叉和联合 const 在值空间用来声明常量 在类型空间与 as 连用,即 “as const

    1.7K20

    经过一个月的探索,我如何将 AST 操作得跟呼吸一样自然

    以 Vue、Svelte 还有刚诞生不久的 Astro 为代表,主要做其他自定义文件到 JavaScript(其他产物) 的编译转化,如 .vue .svelte .astro 这一类特殊的语法。...,我们声明对哪一部分语句做哪些处理,比如我要把所有符合条件 If 语句的判断都加上一个新的条件,然后 Babel 在遍历 AST 时(@babel/traverse),发现 If 语句被注册了这么一个操作...很明显,这样的操作是有利有弊的,我们能够在创建 Function、Class、Import 这一类声明时,直接传入其结构即可,但对于函数(类方法)内部的语句ts-morph 目前的确只提供了这种最简单的能力...@ts-morpher 将增删改查方法拆分到了不同的 package 下,如 @ts-morpher/helper 中的方法均用于获取声明声明 Identifier ,如你可以获取一个文件里所有的导入的...Module Specifier(fs 之于 import fsMod from 'fs'),也可以获取所有导入的声明,但是你不用管这个声明长什么样,直接扔给 @ts-morpher/checker

    1.5K11

    【Vuejs】301- Vue 3.0前的 TypeScript 最佳入门实践

    ( tuple第一项应为 number类型) 2. 枚举 enum* ? enum类型是对JavaScript标准数据类型的一个补充。...interface Cat { miao(); } type Pet = Dog | Cat // 具体定义数组每个位置的类型 type PetList = [Dog, Pet] type 语句中还可以使用...3.5 声明文件与命名空间: declare 和 namespace 前面我们讲到Vue项目中的 shims-tsx.d.ts和 shims-vue.d.ts,其初始内容是这样的: // shims-tsx.d.ts...这里列举出几个常用的: declare var 声明全局变量 declare function 声明全局方法 declare class 声明全局类 declare enum 声明全局枚举类型 declare...你需要动 src/vue-shim.d.ts: // 声明全局方法 declare module 'vue/types/vue' { interface Vue { readonly

    4.4K52

    记录在TS项目中使用eslint规范代码时遇到的问题

    报错内容:as语句无法识别,导致(window as any).hello这种语句报错 问题原因:eslint 在检测代码时,会先将代码转换为 AST 对象 而这个转换过程需要指定的解析器才能完成,eslint...默认使用的是babel解析器,而babel解析器里没有包含ts语法内容的解析器,所以,我们需要使用ts为eslint开发的解析器 解决方法: 确保安装了eslint以及ts eslint解析器 npm...其他配置 } 在interface或者type类型声明中,函数生命中的参数类型表达式报 'xxx' is defined but never used.eslintno-unused-vars 报错内容...:在interface或者type类型声明中,函数生命中的参数类型表达式报 'xxx' is defined but never used.eslintno-unused-vars 报错原因:eslint...eol-last': 2, // 文件以单一的换行符结束 // 'no-unused-vars': [1, { vars: 'all', args: 'after-used' }], // 不能有声明后未被使用的变量参数

    56110

    【编码规范】Typescript 编码风格指南

    使用camelCase为属性本地变量命名。 不要为私有属性名添加_前缀。 尽可能使用完整的单词拼写命名。 组件 1个文件对应一个逻辑组件 (比如:解析器,检查器)。 不要添加新的文件。...1000 语法信息 2000 语言信息 4000 声明生成信息 5000 编译器选项信息 6000 命令行编译器信息 7000 noImplicitAny信息 普通方法 由于种种原因,我们避免使用一些方法...不使用ECMAScript 5函数;而是使用core.ts这里的。 不要使用for..in语句;而是使用ts.forEach,ts.forEachKey和ts.forEachValue。...如果可能的话,尝试使用ts.forEach,ts.map和ts.filter代替循环。 风格 使用arrow函数代替匿名函数表达式。 只要需要的时候才把arrow函数的参数括起来。...0, n = str.length; i < 10; i++) { } if (x < 10) { } function f(x: number, y: string): void { } 每个变量声明语句声明一个变量

    1.3K20

    快速学习TypeScript——模块

    相反地,如果一个文件不带有顶级的import或者export声明,那么它的内容被视为全局可见的(因此对模块也是可见的) 导出 导出声明 任何声明(比如变量,函数,类,类型别名接口)都能够通过添加export...比如,像JQuery这样的类库可能有一个默认导出 jQuery$,并且我们基本上也会使用同样的名字jQuery$导出JQuery JQuery.d.ts declare let $: JQuery;...好比使用了reference标签,编译器会根据 import语句编译相应的文件 Validation.ts export interface StringValidator { isAcceptable...我们可以使用顶级的 export声明来为每个模块都定义一个.d.ts文件,但最好还是写在一个大的.d.ts文件里。...它们通常会使用一个前缀后缀来表示特殊的加载语法。 模块声明通配符可以用来表示这些情况 declare module "*!

    1.2K10

    从项目中由浅入深的学习typescript (3)

    语法 数据类型 any(任意类型);number;string,boolean;数组:number[]new Array(项的数据类型相同);void返回值类型;null;undefined;never...(从不出现值);元祖(比数组强大,项的类型可以不同);接口:interface关键字;对象:类似JS的object;函数:function声明;类:class关键字,包括字段,构造函数和方法 变量声明...let [变量名] : [类型] = 值, 必须指定类型声明array,let arr: any[] = [1, 2] 运算符,条件语句,循环 同JS 函数 声明同JS,形参必须指定类型,因为形参也是变量...vue+ts项目配置 2.接口和类的区别? 接口只声明成员方法,不做实现 ,class通过implements 来实现接口 ts中接口和类的区别 3.接口和对象的区别?...接口是公共属性方法的集合,可以通过类去实现; 对象只是键值对的实例 4.类class和函数的区别? 类是关键字class,函数是function 类可以实现接口 5.接口实现继承方法?

    66420

    TS 4.5 最新发布!新的扩展名、新语法、新的工具类型

    回到 TS 原本的逻辑,它会检查 main,以及其相关的类型文件(如 ./lib/main.js 对应于 ./lib/main.d.ts),或者通过 types获取声明文件地址(如果有的话)。...或者是在更新 TS 版本时其内置 lib 声明可能存在的 Breaking Change。...在先前的版本中 TS 还引入了 --importsNotUsedAsValues 选项来控制整条 import 语句的情况,其值包括: remove(默认),只有仅引入了类型的导入语句会被移除 preserve...,所有导入的值类型没有被使用的导入语句都会被保留 error,类似于 preserve,但是会在导入仅有类型时抛出错误 当 --preserveValueImports 和 --isolatedModules...新的类型导入语法 type Modifiers on Import Names 在 TS4.5 以前,我们可以这么来标识一条导入语句,其具名导入成员均为类型。

    1.4K30
    领券