当前位置: 首页 > news >正文

Typescript配置文件(tsconfig.json)详解系列五:allowArbitraryExtensions

前言

本文使用的Typescript版本为5.5.2

配置

{compilerOptions: {"allowArbitraryExtensions": true}
}

说明

allowArbitraryExtensions是typescript@5.x后加入的字段,允许我们可以导入任何后缀名的文件

并且我们必须要有一个和这个文件配套的类型声明文件。(这是一个官方的问题回复:https://github.com/microsoft/TypeScript/issues/55507

比如如下:

// demo.css
.demo {color: #FFF;
}

那么我们要为他定义一个声明文件{file basename}.d.{extension}.ts(必须叫这个名字)。

declare const css: {demo: string;
};
export default css;

当 allowArbitraryExtensions为false会抛出如下错误:

ts/index.ts:1:23 - error TS6263: Module './demo.css' was resolved to 'C:/Users/86159/ts/demo.d.css.ts', but '--allowArbitraryExtensions' is not set.1 import demoStyle from './demo.css';~~~~~~~~~~~~Found 1 error in ts/index.ts:1

其他

如何针对非js或非ts提供类型

如果我们不太关注导入文件的类型。我们可以如下声明

declare module "*.css";
declare module "*.sass";
declare module "*.less";
declare module "*.log";

如果我们想作为变量去使用也很简单。

比如typescript编译只是编译器(webpack等)其中一环,他最终输出的js文件会经过其他处理器去处理(有可能会转化为一个js变量),所以他的类型定义为和这个输出变量的类型一样就可以了。

后记

这个字段感觉有点鸡肋,原因如下:

  • 一般不会为*.css等文件定义类型,定义大概率会使用declare module "*.css"; 这种方式去定义。
  • 实际上只有类型声明文件的文件名为{file basename}.d.{extension}.ts才需要这个参数去控制,如果文件名为{file basename}.{extension}.d.ts的话不管allowArbitraryExtensions设置成什么都不会报错。
// demo.d.css.ts:必须设置allowArbitraryExtensions为true,引入demo.css才能正常编译。
// demo.css.d.ts: 不需要设置allowArbitraryExtensions,引入demo.css也能正常编译。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • PointNet点云语义分割
  • 使用Apache http client发送json数据(demo)
  • 02:【stm32】工程模板的创建
  • 考研英语二--小作文如何写
  • 苹果iPhone 16 Pro系列有望支持Wi-Fi 7,再也不说苹果信号不好了
  • Python | Leetcode Python题解之第315题计算右侧小于当前元素的个数
  • 08.02_111期_Linux_NAT技术
  • Binder、 AIDL 、IPC 大展神威
  • linux进程控制——进程等待——wait、waitpid
  • uniapp自定义网格布局用于选择金额、输入框焦点事件以及点击逻辑实战
  • 【面试题】C++:面向对象的三大特性?
  • Cocos Creator文档学习记录
  • Java二十三种设计模式-外观模式(9/23)
  • 示例:在ML.NET中应用Model Builder模型生成器构建图片分类模型
  • 定位Oracle表空间问题
  • 【Leetcode】104. 二叉树的最大深度
  • 【剑指offer】让抽象问题具体化
  • Angular 2 DI - IoC DI - 1
  • C++回声服务器_9-epoll边缘触发模式版本服务器
  • Codepen 每日精选(2018-3-25)
  • ES6系列(二)变量的解构赋值
  • Flannel解读
  • Hibernate最全面试题
  • httpie使用详解
  • iOS仿今日头条、壁纸应用、筛选分类、三方微博、颜色填充等源码
  • iOS高仿微信项目、阴影圆角渐变色效果、卡片动画、波浪动画、路由框架等源码...
  • iOS筛选菜单、分段选择器、导航栏、悬浮窗、转场动画、启动视频等源码
  • Java 9 被无情抛弃,Java 8 直接升级到 Java 10!!
  • JavaScript设计模式与开发实践系列之策略模式
  • Java知识点总结(JDBC-连接步骤及CRUD)
  • React-redux的原理以及使用
  • Spring Security中异常上抛机制及对于转型处理的一些感悟
  • tensorflow学习笔记3——MNIST应用篇
  • uni-app项目数字滚动
  • vue.js框架原理浅析
  • 从零开始学习部署
  • 猫头鹰的深夜翻译:Java 2D Graphics, 简单的仿射变换
  • 如何选择开源的机器学习框架?
  • 深入浅出Node.js
  • 在weex里面使用chart图表
  • Spark2.4.0源码分析之WorldCount 默认shuffling并行度为200(九) ...
  • ​云纳万物 · 数皆有言|2021 七牛云战略发布会启幕,邀您赴约
  • # .NET Framework中使用命名管道进行进程间通信
  • #每天一道面试题# 什么是MySQL的回表查询
  • #我与Java虚拟机的故事#连载17:我的Java技术水平有了一个本质的提升
  • $$$$GB2312-80区位编码表$$$$
  • (delphi11最新学习资料) Object Pascal 学习笔记---第8章第5节(封闭类和Final方法)
  • (pytorch进阶之路)CLIP模型 实现图像多模态检索任务
  • (ZT)出版业改革:该死的死,该生的生
  • (九)c52学习之旅-定时器
  • (每日持续更新)信息系统项目管理(第四版)(高级项目管理)考试重点整理第3章 信息系统治理(一)
  • (原创) cocos2dx使用Curl连接网络(客户端)
  • (转)GCC在C语言中内嵌汇编 asm __volatile__
  • **PHP二维数组遍历时同时赋值
  • .NET 编写一个可以异步等待循环中任何一个部分的 Awaiter