ts定义html是什么类型,TypeScript—类型定义文件(*.d.ts)

本文详细介绍了如何在TypeScript中引入并使用jQuery,解决声明文件缺失的问题,以及如何通过安装@types/jquery包消除类型错误。同时,文章探讨了TS的数据类型,包括基本类型、对象类型、函数类型、泛型等,并展示了类的定义和继承。此外,还讲解了如何创建.d.ts文件来为JavaScript文件提供类型声明,使TS能识别JS模块。
摘要由CSDN通过智能技术生成

一、ts文件中引入jquery。

1.大家是否有再vue 上使用过 ts,并再 .ts文件中引用过 jquery

1.1是不是遇到过如下问题:

import $ from 'jquery';

/***

Could not find a declaration file for module 'jquery'. 'd:/node-common/node_modules/jquery/dist/jquery.js' implicitly has an 'any' type.

Try `npm install @types/jquery` if it exists or add a new declaration (.d.ts) file containing `declare module 'jquery';`

/

2.上述提示:

2.1.找不到模块“jquery”的声明文件

2.2.尝试npm install @types/jquery (如果存在的话)

2.3.添加一个包含declare module 'jquery';的声明(.d.ts)文件

3.尝试安装 npm install @types/jquery 文件

执行后,发现npm仓库下是有这个包的,而且不需要引用该包,且项目能够正常运行了,是不是很神奇。

其实这里可以理解为,ts文件并不知道jquery文件到底暴露出的什么东西,无法获取。.d.ts 会把jquery 文件里面的方法属性重新定义为它能够认识的类型。

比如说常用到的$.ajax;$.get,在node_modules/types/jquery/JqueryStatic.d.ts 中我们可以看到对其的定义

interface JQueryStatic {

ajax(settings?JQuery.AjaxSettings):Jquery.jqXHR;

get(url: string,

data: JQuery.PlainObject | string,

success: JQuery.jqXHR.DoneCallback | null,

dataType?: string): JQuery.jqXHR;

}

说到这里你可能还不太懂 .d.ts文件怎么去用。

那么接下来和大家一起分享如何在自己的项目中使用.d.ts文件,(如2.3中所说,也可以自己创建.d.ts文件,对jquery 进行定义)。

二、了解下TS数据类型

简单的数据类型:

number:包括数字,浮点数,以及NAN、+-Infinity

string:字符串类型

boolean:布尔类型

null,undefined类型

void类型:可以用于表示没有返回值的函数

对象类型

type ballType = {

color:string;

r:number;

}

let ball : ballType = {color:'red',r:10}

interface ball2Type{

color:string;

r:number;

}

let ball2:ballType = {color:'red',r:0.5}

/***

interface 和 type都可以去定义类型。具体也是有区别 如interface 只能定义function、object、class类型,type 不仅可以定义此类型,还可以定义其它类型 type msg = string; 具体差异可自行查阅资料

*/

//顺带着说一下 可选属性

interface ball3Type {

color:string;

r:number;

index?:number // ? 把该属性设为可选属性,即该属性可有可无

}

let ball3:ball3type = {color:'red',r:10} //正确

let ball4:ball3type = {color:'red'} //错误,ball3Type 需要有r属性

let ball5:ball3type = {color:'red',r:10,index:1} //正确

//Partial 实现可选属性

//先看一下Partial 类型的定义

type Partial = {

[P in keyof T]?: T[P];

};

let ball6:Partial = {}//正确

let ball7:Partial = {r:10} //正确

//实际上 Partial 转化 ball3Type 后,其类型就变成了,每个属性都是可选属性,如下

type Patial_ball3Type = {

color?:string | undefined; // | 如 js 里面的 ‘||’ 或的意思

r?:number | undefined;

index?number | undefined;

}

//类型的拓展属性

let ball8:ball3Type = {color:'red',r:10,title:'ball'} //error ,title 属性不属于ball3Type,所以呢,怎么处理这种方式呢,如下:

type ball4Type = {

color:string;

r:number;

index?number;

[key:string]:string|number; // 表示,可含有string类型的key,且值为stirng或number类型。

}

let ball9:ball4Type = {color:'red',r:10,title:'ball',x:10,y:10} //正确

函数类型

//声明函数类型

type funType = (name:string) = >void;

let fun:funType = (name)=>{ console.log(name) }

//多态

interface fun2Type = {

set(name:string):void;

get(x:number):number;

}

let fun2:fun2Type = {

set(name){},

get(x){

return x;

}

}

还有一些混合类型,类型的并集,联合,结构子类型等,

//简单列举下类型的并集和联合

type A = {

x:number;

y:number;

}

type B = {

z:number;

x:number;

}

let m : A&B = {x:1,y;1,z:1}

let z:A|B = {z:1,x:1}

泛型

//泛型很重要,大家可以查阅资料细看,这里简单列举一下

//函数泛型

function get1(num:T[]):T{

return num[0]

}

//接口泛型

interface gen2Type{

getColor(ball:T):string;

saveBall(ball:T):void;

}

//类的泛型

class gen3{

info(i:T):T{

return i;

}

}

三、类

//定义一个类

class A{

//静态成员

static classId:number;

//成员变量,默认为public 公有属性

name:string;

age:number|void;

s?:string;

//构造函数

constructor(name:string,age?:number);

//方法

setS(s:string){

this.s = s;

}

}

//通过 new 实例化一个对象

const stu = new A('zhangsan');

const stu1 = new A('lisi',18);

stu1.setS("hello");

A.classId = 123;

console.log(`A.classId=${A.classId}`)

//类的继承

class A {

name:string;

constructor(name:string){

this.name = name;

}

}

class B extends A {

age:number;

constructor(name:string,age:number){

super(name);

this.age = age;

}

}

console.log(new B("zhangsan",18));

// B {name:'zhangsan',age:18}

//接口

interface Ani{

kinds:number;

draw(name:string):void;

getKinds():number;

}

interface Bni extends Ani{

time:Date;

setTime(time:Date):void;

}

//当作变量类型

const M:Bni = {

kinds:1,

time:new Date(),

draw(name:string){},

getKinds(){

return this.kinds;

},

setTime(time:Date){}

}

//当作接口

class M implements Bni {

kinds = 1;

time = new Date();

draw(name:string){}

getKinds(){

return this.kinds;

}

setTime(time:Date){}

}

四、动手编写.d.ts文件,让ts文件识别js

新建index.js文件

module.exports = {

url:'https://www.cnblogs.com/zcookies/'

}

新建custom.d.ts

//定义模块

declare module '*/index.js'{

const content: {

url:string

};

export = content;

}

入口文件main.ts

import config from './index.js';

console.log(config.url);

//此时发现引入index.js 不会报错,而且会智能提示 config下面的url 属性;

/***

1.如果没有custom.d.ts

代码会抛出:Could not find a declaration file for module './index.js';

且没有智能提示;

2.如果声明 declare module '*.js',这样做可以解决掉错误提示,但是没有智能提示;

3.想要正确的智能提示,需要按照js文件,输入对应的.d.ts文件即可。

*/

大家可以利用上面的知识点,实现对更复杂的js文件进行声明.d.ts文件;

TypeScript中,.d.ts文件是用来描述JavaScript库或模块的声明文件。它的作用是为了在开发过程中提供代码提示、类型检查以及代码文档化等功能。 首先,我们需要确保项目中安装了TypeScript。然后,我们可以在项目中创建一个.d.ts文件,命名规则一般是将库的名称与后缀.d.ts结合,比如"jquery.d.ts"。 接下来,我们需要在.d.ts文件中编写对应库的声明。对于常见的库,往往有很多社区已经编写好的声明文件可供使用,我们可以在DefinitelyTyped上搜索并下载已有的声明文件。 如果找不到已经存在的声明文件,我们可以自行编写。一般来说,我们需要定义库的各种类型、接口、函数以及其他使用方法。可以通过查阅库的官方文档来了解库的API,并根据需要进行适当的声明。 完成编写后,我们可以将.d.ts文件放置在项目中合适的位置,例如与库文件在同一目录下,或者在项目根目录下的一个名为"typings"的文件夹中。 在项目中使用该库时,TypeScript会自动根据.d.ts文件提供代码提示和类型检查。我们只需要在需要使用库的文件中导入库的模块,并按照库的API进行使用即可。 总结来说,使用.d.ts文件的流程包括:安装TypeScript、创建.d.ts文件、编写库的声明、下载或编写完成声明文件后,将其放置在合适的位置,然后在项目中使用库的模块并享受TypeScript的强大功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值