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也能正常编译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值