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

按照教程操作,但我不明白为什么会收到这样的消息:“属性'substring‘不存在于类型'() => WordArray’.ts(2339)上”

这个错误信息表明你在尝试访问一个名为 substring 的属性,但该属性并不存在于 () => WordArray 类型上。这通常是因为 TypeScript 编译器无法找到 substring 方法的定义。

基础概念

在 TypeScript 中,类型系统会检查变量和方法的类型是否匹配。如果你尝试调用一个不存在的方法,编译器会报错。

可能的原因

  1. 类型定义缺失WordArray 类型没有定义 substring 方法。
  2. 类型错误:你可能错误地认为某个对象是 WordArray 类型,但实际上它可能是另一个类型。

解决方法

  1. 检查类型定义: 确保 WordArray 类型确实有 substring 方法。如果没有,你需要添加这个方法或者使用其他方法来实现相同的功能。
  2. 检查类型定义: 确保 WordArray 类型确实有 substring 方法。如果没有,你需要添加这个方法或者使用其他方法来实现相同的功能。
  3. 类型断言: 如果你确定某个对象是 WordArray 类型,但编译器无法识别,可以使用类型断言。
  4. 类型断言: 如果你确定某个对象是 WordArray 类型,但编译器无法识别,可以使用类型断言。
  5. 查看文档: 查看 WordArray 类型的官方文档,确认是否有 substring 方法。

示例代码

假设 WordArray 是一个自定义类型,你可以这样定义和实现 substring 方法:

代码语言:txt
复制
interface WordArray {
    data: string[];
}

class WordArrayImpl implements WordArray {
    data: string[];

    constructor(data: string[]) {
        this.data = data;
    }

    substring(start: number, end?: number): string {
        return this.data.join('').substring(start, end);
    }
}

const wordArray = new WordArrayImpl(['h', 'e', 'l', 'l', 'o']);
const result = wordArray.substring(0, 5);
console.log(result); // 输出 "hello"

参考链接

如果你使用的是某个库中的 WordArray 类型,建议查看该库的官方文档或源码,确认是否有 substring 方法。

希望这些信息能帮助你解决问题!

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

全网最全,最详细,最友好 Typescript 新手教程

TypeScript新手教程:为什么是TypeScript? 一开始,你不会完全理解TypeScript为什么有意义,毕竟它在变成JavaScript代码之前已经被剥离了。...初学者TypeScript教程:设置TypeScript 设置?为什么如此?TypeScript不只是一种语言吗?种。...url"属性不存类型字符串TypeScript。...看看我们代码,我们可以想到一个简单“模型”,命名为Link,对象形状应该符合以下模式: 它必须有一个类型为stringurl属性 在TypeScript中,你可以用一个接口来定义这个“模型”,就像这样...那么在接口和类型之间应该使用什么呢?我更喜欢复杂对象接口。TypeScript文档也建议了一种方法: 因为软件理想属性是对扩展开放,所以如果可能的话,应该始终在类型别名使用接口。

6K40

深度讲解TS这样TS,迟早进大厂【19】:泛型

TS系列地址: 21篇文章带你玩转ts # 泛型 泛型(Generics)是指在定义函数、接口或类时候,不预先指定具体类型,而在使用时候再指定类型一种特性。...泛型约束§ 在函数内部使用泛型变量时候,由于事先不知道它是哪种类型,所以不能随意操作属性或方法: function loggingIdentity(arg: T): T { console.log...(arg.length); return arg; } // index.ts(2,19): error TS2339: Property 'length' does not exist on...上例中,泛型 T 不一定包含属性 length,所以编译时候报错了。 这时,我们可以对泛型进行约束,只允许这个函数传入那些包含 length 属性变量。...,其中要求 T 继承 U,这样就保证了 U 不会出现 T 中不存字段。

60630
  • TypeScript学习笔记(二)—— TypeScript基础

    + y; }; 这是可以通过编译,不过事实,上面的代码只对等号右侧匿名函数进行了类型定义,而等号左边 mySum,是通过赋值操作进行类型推论而推断出来。...故建议大家在使用类型断言时,统一使用 值 as 类型 这样语法,本书中也贯彻这一思想。...当我们引用一个在此类型不存属性或方法时,就会报错: const foo: number = 1; foo.length = 1; // index.ts:2:5 - error TS2339:...上面的例子中,我们需要将 window 添加一个属性 foo,但 TypeScript 编译时会报错,提示我们 window 不存在 foo 属性。...as any).cache[key]; } 那么我们在使用它时,最好能够将调用了它之后返回值断言成一个精确类型这样就方便了后续操作: function getCacheData(key: string

    5K20

    使用JS将聊天记录聚合在一起

    前言 我们在QQ聊天时,同一分钟聊天记录会被放在一起展示,当我们发送消息时,每条消息发送时间都会精确到秒,那么他是如何实现将这些数据按分钟划分到一起显示呢?...属性,它是消息发送时间,精确到了时分秒,现在我们要做就是把同一分钟时间只保留一个createTime属性,渲染时间时候只渲染拥有createTime属性对象,这样就做到了将相同分钟数据渲染到了一起...遍历消息记录数组,获取当前遍历到消息记录对象 获取遍历到消息记录对象createTime属性,截取 年-月-日 时:分,声明一个变量time来保存 判断time是否存在于timeObj中 如果存在就删除遍历到消息记录对象中...msgListType为消息记录对象类型定义,has为lodash方法用于判断对象中是否包含某个属性,unset也为lodash方法用于移除对象中某个属性。...分判断其是否在已渲染消息记录列表里,如果不存在则原封不动渲染,否则就删除createTime字段后渲染,代码如下: // 接收到服务端推送消息,渲染单个消息对象 const thisSenderMessageObj

    92530

    深度讲解TS这样TS,迟早进大厂【11】:类型断言

    故建议大家在使用类型断言时,统一使用 值 as 类型 这样语法,本书中也贯彻这一思想。...当我们引用一个在此类型不存属性或方法时,就会报错: const foo: number = 1; foo.length = 1; // index.ts:2:5 - error TS2339:...上面的例子中,我们需要将 window 添加一个属性 foo,但 TypeScript 编译时会报错,提示我们 window 不存在 foo 属性。...上面的例子中,我们也可以通过[扩展 window 类型(TODO)][]解决这个错误,不过如果只是临时增加 foo 属性,as any 更加方便。...as any).cache[key]; } 那么我们在使用它时,最好能够将调用了它之后返回值断言成一个精确类型这样就方便了后续操作: function getCacheData(key: string

    1.2K20

    比较Go、Rust、Scala、Java、Kotlin、Python、Typescript 和 Elm中编译器错误

    调用不存方法或函数 我们首先调用一个不存方法或函数。 Java 有一个简单明了错误消息,尽管 cannot find symbol 消息不太清楚(为什么你丢失了符号?)...我们还得到了一个错误编号 TS2339。遗憾是,在 Google 搜索该编号没有找到更多信息。此外,Typescript 不会显示有问题行或受影响类型。...$ npx tsc typescript/Error1.ts typescript/Error1.ts(4,11): error TS2339: Property 'notThere' does not...当我们按照建议进入解释时,这比错误消息更好,因为它指出了我们使用错误类型作为参数(但没有看到我们反转了参数)。...有点令人困惑,但我猜想作为一名 Elm 开发人员,这种评估策略变得自然而然。

    12410

    Node.js项目TypeScript改造指南

    如果你用 import 导入项目内其他源文件,由于原先 commonjs 写法,提示你文件“/path/to/project/src/mod.ts”不是模块。...declare module 'mod' 至于为什么需要放在 typings 目录,并且以包名作为子包目录,因为不这样写,ts-node(下文提到)识别不了,暂且按照 ts-node 规范来吧。...对象属性赋值报错 动态对象是 js 特色,我先定义个对象,不管啥时候我都可以直接往里面加属性,这种报错,最快改造办法就是给对象申明 any 类型。...函数中使用this 根据写法不同,大概会有以下4种报错: 1.类型“NodeModule”不存属性“name”。...ts(2339)2.类型“typeof globalThis”不存属性“name”。ts(2339)3."this" 隐式具有类型 "any",因为它没有类型注释。

    4.4K20

    Node.js 项目 TypeScript 改造指南

    如果你用 import 导入项目内其他源文件,由于原先 commonjs 写法,提示你文件“/path/to/project/src/mod.ts”不是模块。...declare module 'mod' 至于为什么需要放在 typings 目录,并且以包名作为子包目录,因为不这样写,ts-node(下文提到)识别不了,暂且按照 ts-node 规范来吧。...对象属性赋值报错 动态对象是 js 特色,我先定义个对象,不管啥时候我都可以直接往里面加属性,这种报错,最快改造办法就是给对象申明 any 类型。...函数中使用this 根据写法不同,大概会有以下4种报错: 1.类型“NodeModule”不存属性“name”。...ts(2339)2.类型“typeof globalThis”不存属性“name”。ts(2339)3."this" 隐式具有类型 "any",因为它没有类型注释。

    8.3K32

    Node.js项目TypeScript改造指南

    如果你用 import 导入项目内其他源文件,由于原先 commonjs 写法,提示你文件“/path/to/project/src/mod.ts”不是模块。...declare module 'mod' 至于为什么需要放在 typings 目录,并且以包名作为子包目录,因为不这样写,ts-node(下文提到)识别不了,暂且按照 ts-node 规范来吧。...对象属性赋值报错 动态对象是 js 特色,我先定义个对象,不管啥时候我都可以直接往里面加属性,这种报错,最快改造办法就是给对象申明 any 类型。...函数中使用this 根据写法不同,大概会有以下4种报错: 1.类型“NodeModule”不存属性“name”。...ts(2339)2.类型“typeof globalThis”不存属性“name”。ts(2339)3."this" 隐式具有类型 "any",因为它没有类型注释。

    4.6K10

    TypeScript 4.2 Beta版本发布:带来诸多更新,营造更好开发体验

    现在系统能够根据你在代码中使用方式来打印出这些类型,这意味着作为 TypeScript 用户,你可以避免显示一些烦人巨大类型,而这往往转化为更好.d.ts 文件输出、错误消息和快速信息及签名帮助中编辑器内类型显示...; } } 为了简化这类场景操作,前不久 TypeScript 在类型带有一个字符串索引签名时加入了“点”属性访问语法(例如 person.name)。...这样将原有 JavaScript 代码过渡到 TypeScript 也简单了一些。 但是,放宽这个限制也意味着人们更容易拼错明确声明属性。...,他们希望收到错误消息。...很明显,movieWatchCount 中肯定不存在某些字符串,但由于存在 undefined,以前版本 TypeScript 仍将可选对象属性视为无法分配给其他兼容索引签名。

    1.6K10

    在实践中学习类型定义、类型覆盖、CSS Modules

    不存属性“container”。...ts(2339),可以看到这个 less 模块被识别成了字符串类型,那当然是不可以,不能满足【对象.属性使用形式; 2.1 类似问题: 在不使用 Vite 脚手架而选择直接创建这样项目的时候你可能就遇到了...classes; } 当我尝试将这段代码放到vite-env.d.ts文件中(.vue就在这儿定义)时却没有得到我预期结果,但是明明类型错误提示有 ts 发出,Vue文件也是这样识别的,那为啥 Less...模块识别错误呢?...是一个可以在编写 CSS Modules 代码时得到更好代码提示插件Ts Server,下面的这张图可以说明一切; 使用这个插件需要两步操作: 配置插件到 tsconfig.json: { "compilerOptions

    1.6K20

    第三十二期:对TypeScript简单理解

    TypeScript 虽然从早几年TypeScript热度已经非常高了,但是实际除了大厂里某些项目是真正TS进行开发以外,其他也还是我们现在写es6语法居多,当然了,大厂里项目其实用TS开发项目其实也不多...很多人在学习TypeScript时候,或者看到比较复杂TypeScript代码觉看不明白不明白为什么要那样写。...上面的代码是从Vuex源码中类型定义文件里复制,它定义了一个名叫Store类,构造函数参数options是一个StoreOptions类,它有两个只读属性state和getters,dispatch...属性是Dispatch类,commit需要符合Commit格式。...因为按照平时写法它应该这样写: function subscribe (fn,options){ console.log('subscribe') } 然后它参数fn接受两个参数mutation

    37120

    TypeScript进阶

    例如:将一个联合类型变量指定为一个更加具体类型(但不能指定为联合类型不存类型): // 使用联合类型时,必须使用这些类型共有的属性才行,但使用类型断言使其确定为某一种类型,就没有了此限制。...: 如果没有明确指定类型TS依照类型推论(Type Inference)规则推断出一个类型: let myFavoriteNumber = 'seven'; //无错 myFavoriteNumber...不对其类型进行指定,TS自动推断为any类型,如果进行了指定,如‘seven’,TS自动推断为string类型。...// 但访问 string 和 number 共有属性不会报错,如:return something.toString(); 当联合类型变量在被赋值时候,根据类型推论规则推断出一个类型,此时访问该类型属性不会报错...定义只读属性(只读约束存在于第一次给对象赋值时候,而不是第一次给只读属性赋值时候) interface Person { readonly id: number; name: string

    97320
    领券