使用typescript时,是否需要为我使用的每个外部js导入plugin.d.ts?
换句话说,我是否需要使用所有接口创建jQuery.d.ts?保存.ts文件不会自动触发Visual Studio中的编译。您将需要构建/重建来触发编译
Declare files(file.d.ts)允许TypeScript编译器从该文件中获得有关您正在使用的JavaScript库的更好类型信息。您可以在一个文件或多个文件中定义所有接口;这应该没有什么区别。您还可以通过以下方式从外部库“声明”正在使用的类型/
似乎每个人都有样品,但我的样品不会
我在windows 7 64位中安装了nodejs 0.8.2。npm安装了-g typescript以获得typescript支持。然后我从TypeScript下载了源代码并尝试了这些示例
但我就是无法编译节点示例。它返回错误消息:
c:\..\..\typescript\bin\tsc.js:21182
if(_fs.existsSync(path)) {
^
TypeError: Object #
下面的代码
interface Foo {
}
declare var Foo: {
new() : Foo;
}
module Bar {
export interface Baz {
}
export declare var Baz: {
new() : Baz;
}
}
function f(p:Foo) {
}
//function b(p:Bar.Baz) {
//}
编译很好,但是如果我在最后两行添加注释,tsc.exe
我尝试使用手册“”部分的技巧为类的静态端(即函数)指定接口:
export interface StaticInterface {
info: string;
}
class _X {
static info = 'something';
...
}
export var X: StaticInterface = _X;
但是当我试图在另一个文件中扩展module.X时,编译器说:
error TS2305: Module '"..."' has no exported
我正在创建我的第一个Phaser游戏作为chromecast接收器应用程序,我的代码有一些问题
我的代码如下:
class TNSeconds {
game: Phaser.Game;
constructor() {
this.game = new Phaser.Game(window.innerWidth * window.devicePixelRatio -20, window.innerHeight * window.devicePixelRatio -20, Phaser.
我一直在努力理解框架中这两个概念之间的区别
我非常熟悉AngularJS 1.x中的指令是什么,AngularJS 2中的组件和指令似乎都非常类似于这个概念…您可以将任何组件都视为具有视图的指令
后果
基于只有组件才有视图这一事实,有两个后果,例如:
只有组件可以定义指令,以便在组件本身及其作为根的整个子树中使用
只有组件可以定义要在组件及其作为根的整个子树中使用的管道
只有组件可以定义视图封装,因为它们可以有视图,而不是指令
当框架为给定组件创建ElementInjector时,它将被标记为
我正在尝试使用伊斯坦布尔为karma框架中的typescript代码获取代码覆盖率
在karma.conf中包含了typescript文件,通过karma typescript预处理器,我们可以对typescript代码进行单元测试和代码覆盖,但代码覆盖率报告用于跨堆栈JavaScript代码
如何获取typescript代码的覆盖率报告?
这是我的karma.conf文件
module.exports=函数(配置){
config.set({
//基本路径,将用于解析文件和排除
基本路径:“
我有这样一个(期望的)结构:
- tsconfig.json
- src
- app.ts
- tests
- appTest.ts
- appTest.js
- dist
- app.js
"scripts": {
"pretest": "npx tsc",
"test": "mocha './test/**/*.ts' --require ts-node/register --recursive"
},
"include": [
获取错误
类型“string[]”上不存在属性“includes”
在node_modules/ng2 breadcrumb/app/components/breadcrumbService.ts中
我正在尝试在angular2应用程序中实现面包屑功能。在tsconfig.js中将编译器目标更改为“es2016”应该可以解决这个问题。在tsconfig.json中向数组中添加“ES2017”:
{
"compilerOptions": {
...
"lib": ["es6",
有一种情况,我有一个类型,它是两个函数的并集,它们的一个参数的类型是文本值。归结为一个简单的例子,本质上是这样的:
type FetchMini = (id: number, representation: 'mini') => MiniUser;
type FetchFull = (id: number, representation: 'full') => FullUser;
function f(fetchUser: FetchMini | FetchFull) {
fe
我开始学习typescript和Vuejs
有人能解释一下为什么我不能从computed allChecked()访问数据中的account属性吗
我有这个错误
ERROR in index.ts
(25,25): error TS2339: Property 'accounts' does not exist on type 'Vue'.
ERROR in index.ts
(25,50): error TS2339: Property 'checkedAccounts' does not
我刚刚遇到了这行代码,它检查变量是否是数组:
export const isArray = Array.isArray || (<T>(x: any): x is T[] => x && typeof x.length === 'number');
isArray([1, 2, 3, 4, 5])
export const isArray=Array.isArray | |((x:any):x是T[]=>x&&typeof x.length=='number
我在TypeScript中实现了类型安全路由器,在推断类型时遇到了麻烦
导出接口路由{
匹配(路径:字符串):Args | void;
构建(args:args):字符串;
}
导出类型Routes={[Tag in keyof State]:Route};
导出接口路由器{
匹配(路径:字符串):部分|无效;
构建(状态:部分):字符串;
}
导出函数createRouter(路由:路由):路由器{
/*…*/返回{}如有;
}
常量根:路由={
匹配:(路径)=>/*…*/未定义,
内部版本
我正在为一个web服务编写一个客户端,其中一个端点从可能的20个参数中提取一个参数(可能会增加)
我在客户机上为这些可能性中的每一个公开了一个方法。现在我是这样做的:
//keys.ts
export const FUNCTION_ONE='FunctionOne';
export const FUNCTION_TWO='FunctionTwo';
...
export const FUNCTION_tworn='functiontworn';
//client.ts
将*作为键从“/keys”
我不知道去哪里看,而且
但它显然缓存了这些文件。因为这是我的进口
但是,它无法从旧路径导入文件
我搜索了所有definition.ts文件,所有文件都已更新
我在这里迷路了 好的。。我不确定它是如何修复的,但我重新格式化了我的Z驱动器来修复它。谢天谢地,我将工作代码与驱动器的其余部分隔离开来。看来唯一的办法就是清理你的工作文件夹
注意:在此之前
npm cache clean [<path>]
npm缓存清理[]
@tl;dr通常在我遇到这种情况时,删除build/lib/d
假设我有一个有效密钥名数组
const validKeys = ['a', 'b', 'c']
如何创建只接受这些键的对象类型?这不起作用:
interface MyObject {
[key in validKeys]: number // for example
}
如果您的validKeys是静态的,您可以为其创建一个类型。然后从该类型中,可以设置对象关键点的类型。
您可以执行以下操作:
type ValidKeys = 'a' | 'b' | 'c'
type MyObject
我构建了这个片段来演示我的问题:
const typeEnum = {
a: 1,
b: 2,
c: 3,
d: 4,
e: 5
};
const isCD = (...types: any[]) => {
return types.some(t => {
return t == typeEnum.c || t == typeEnum.d;
});
};
console.log(
isCD(
我想从.vue文件中导出几个带有组件的接口
Basic.vue:
<template>
<div class="app">
<router-view></router-view>
</div>
</template>
<script lang="ts">
import { Vue, Component } from "vue-property-decorator";
expor
根据TypeScript文档:
但是,当使用--stricnullchecks标志时,null和undefined仅可分配给void及其各自的类型。这有助于避免许多常见错误。如果要传入字符串或null或undefined,可以使用union类型字符串| null | undefined。下面再次介绍有关联合类型的更多信息
但是,当我尝试以下代码片段时:
// This worked correctly
let voidIsUndefined: void = undefined;
// Whil
我没有找到超级代理的任何类型脚本定义。因此,当我尝试将TypeScript应用程序编译为JavaScript时,会收到错误消息:
ts:类型“SuperAgentRequest”上不存在属性“proxy”
我已经创建了一个包含声明的文件,但我不知道还有什么要做
declare module 'superagent-proxy';
我想我想定义一些高阶函数,它接受超级代理并以某种方式返回带有代理的超级代理
这是我迄今为止最好的尝试:
import * as request from 'super
这两个函数定义之间有什么区别
使用第一个getProperty,TypeScript可以推断返回的类型。但第二个失败了
函数getProperty(对象:T,键:K){
返回obj[键];
}
函数getProperty2(对象:T,键:keyof T){
返回obj[键];
}
设obj={
答:1,,
名称:'测试',
}
const name2=getProperty(obj,'name');
name2.length;//这是确定的,name2被推断为字符串
const name3=ge
我有以下几种:
Foo {
foobar: any
}
Bar {
fooBarBar: any;
}
这样定义的函数:
this.api.submit(param: Foo | Bar)
用法:
this.api.submit(param.foobar) // does not exist on Bar
Error: Property 'foobar' does not exist on type 'Foo| Bar'.
Property 'foobar' does not e
我在开玩笑地模仿UserService。以下是服务的外观:
//UserService.ts
export const create=async body=>{
…保存到数据库。。。
}
export const getById=async id=>{
…从数据库返回用户。。。
}
我的测试如下所示:
//auth.test.ts
从“../services/UserService”导入*作为UserService;
jest.mock('../services/UserService');
我用的是离子4。我将数据发布到API,然后得到如下返回结果:
{
"responses": [
{
"Detection": {
"Images": [
{"url":"https:URL"},
],
"Ages": [
{"age":"33"},
我想创建一个类型,其中的值是对其自身属性的引用。大致如下:
type T = {[k:string]: keyof *a reference to this type*}; //
这样你就可以写这样的东西:
const t:T = {
a:"b", // valid
b:"a", // valid
c:"d" // invalid since "d" is not a property of t
};
在不分解类型或预先明确指定属性的情况下,这是可能的吗?没有具体的类型T有这样
我正在使用TSDX工具构建react typescript库。我在@types/目录中导出了许多类型,当我在应用程序中使用这些类型时,编译器会很清楚地找到它们
然而,在我的构建过程中,它们并没有被复制到我的输出包中,这让我感到惊讶,因为它们是通过代码引用的(代码确实被正确绑定了)
信不信由你,这实际上是故意的
您可以在tsconfig.json中定义类型的位置,并且希望它们始终位于最终构建中(因为它们没有移动)。i、 e.鉴于这种结构:
src/app.ts
types/app.d.ts
Ty
当你在上面创建一个typescript项目时,结果发现它有一个问题
它不知道BigInt。虽然代码运行良好,但我仍然希望错误消失:)
因此,在上述情况下,我可以添加以下内容
declare function BigInt(inp: number | string);
这样做有效,错误消失了。但是当我添加更多的代码时,就像这样
declare function BigInt(inp: number | string);
function convert(inp: string): BigIn
我不明白到底发生了什么,也不明白为什么要在引擎盖下这样做:
如果Something是一种类型,那么当启用--isolatedModules时,为什么从“别处”导出{Something}会产生错误
相反,如果SomeThing是一个值,或者如果--isolatedModules未启用,为什么从“别处”导出{SomeThing}不是一个错误
为什么从“别处”指定导出类型{SomeThing}可以修复该错误
(背景信息)
有:
仅键入导入和导出
这个特性是大多数用户可能永远不会想到的;
但是,如
我正在尝试编写一个decorator,该decorator接受一个方法,如果该方法没有在指定的超时(使用方法参数指定)内完成,则会抛出一个错误。如果不指定超时,则会导致方法运行时,就好像不存在参数一样
export const setMethodTimeout = (): Function => {
return function(target: any, propertyKey: string | symbol, descriptor: PropertyDescriptor) {
而不是这个,
import { client } from "./setupApi";
export const getLayout = ({ page, entity, list }: {page: string, entity: string, list: string}) => {
return client.get("/secure/nav.json");
};
我如何使用这个界面
export interface getLayout
我可以像这样为函数CustomErr创建打字:
declare class CustomErr extends Error {
constructor(message: string);
}
function CustomErr(message: string) {
var err = new Error(message)
Object.setPrototypeOf(err, CustomErr.prototype)
return err
}
CustomEr
我遇到了一个非常奇怪的错误,我真的不知道为什么会发生
我正在尝试查询所有博客帖子状态(只有三种——草稿、已发布和已存档)以发送回我的前端。在我的控制器中,我将路线定义为:
@Controller('blog/posts/statuses')
export class BlogPostStatusController {
constructor(
private readonly blogPostStatusService: BlogPostStatusService
默认情况下,--lib是从--target派生而来的:
注意:如果未指定--lib,则会显示默认的库列表
注射。注入的默认库包括:
For——目标ES5:DOM、ES5、ScriptHost
For--目标ES6:DOM、ES6、DOM.Iterable、ScriptHost
同一文档说明默认的--target值为ES3:
指定ECMAScript目标版本:
“ES3”(默认设置)
“ES5”
“ES6”/“ES2015”
“ES2016”
“ES2017”
“ES2018”
“ES201
在使某些代码严格兼容模式时,我经常遇到如下模式:
接口项{
foo?:foo;
}
接口Foo{
酒吧:字符串;
}
声明常量项:项[];
items.filter(item=>!!item.foo.map(item=>item.foo.bar);//错误!item.foo可能未定义
这会在--stricnullchecks中创建错误,因为定义了item.foo的信息不会传播
总的来说,我一直在创建一次性的防护装置来处理类似的事情
函数hasFoo(item:item):item是item&{
使用,可以很好地将对象/数组文本的类型缩小到其元素
e、 g
(如果没有作为常量,T将是类型T=(字符串|数字)[],这是非常广泛的,有时是不需要的。)
现在的问题是,由于as const的结果,数组也变成了readonly,而我只是希望它有一个狭窄的类型。因此,它不能传递给以下函数
function fiveLover(pairs: [5, string][]): void {
pairs.forEach((p) => console.log(p[1]));
}
fiveLover
我有一个全局拦截器,需要初始化我自己的请求上下文DTO,我希望这个DTO可以在处理当前请求的控制器中访问
到目前为止,我找到的解决方案是创建请求范围的可注入RequestContext类:
import {
Injectable,
Scope
} from '@nestjs/common';
import { Request } from 'express';
import { IncomingHttpHeaders } from 'http';
@Injectable({ s
我使用的是公开SDK的,但不是您可以使用它创建的某个对象(user)的类型(UserModule)
import { Magic } from 'magic-sdk';
// ...
function useMagicLinkAuthentication() {
const [magicReady, setMagicReady] = usePromise<Magic>();
const [isMagicInitialized, setMagicInitialized] =
我想得到一个范围数数组,我写了这个函数
public static getNumberRange(from: number, to: number): number[] {
return Array(to - from + 1).fill().map((v, i) => i + from);
}
但我遇到了一个问题,因为fill()需要一个参数
任何解决方案???这在JavaScript中都是一件恼人的事情。如果您创建一个X长度的数组(例如新数组(5)),您将得到[空×5]
我想公开一个方法,该方法将某些联合类型作为参数,并为此提供自动完成功能。由于这种联合类型可以通过声明合并进行扩展,因此自动完成是这里的一个关键特性
但是,如果用户在使用my library时不使用TypeScript,或者不想向声明中添加特定的类型,那么它应该或者接受联合类型的字符串
简而言之:我希望联合类型自动完成,但也允许任何与之不匹配的字符串
仅使用联合类型的示例:
导出接口值{
“变体-a”:未定义,
“变体b”:未定义,
“变体c”:未定义,
}
函数doAThing(名称:T):vo
我想实现将接口A作为输入的通用函数,并在此基础上创建一个“包装器对象”
因此:
接口输入{
字段1:字符串
字段2:布尔值
字段3:日期
}
接口输出{
[key:keyof T]:{//我知道这不是有效的TS,只是为了解释我的意思
值:T[键]
someFlag:boolean//默认设置为false
}
}
常量magic=():输出=>{…}
常量magicObject=magic()
magicObject.field1.value//undefined
magicObject.fiel
我一直在学习AWS CDK课程,我正在尝试创建一个lambda函数,并将其与api网关集成相关联。我有以下代码:
const getPhotos = new lambda.NodejsFunction(this, "MySimpleAppLambda", {
runtime: Runtime.NODEJS_14_X,
entry: path.join(__dirname, "..", "api", &qu
在TypeScript中,我可以从如下的泛型参数推断返回类型。当我使用位置参数时,它工作得很好
const handleAndReturnNumber = (n: number) => n
const handleAndReturnString = (n: number) => String(n)
const doSomething1 = <R extends (n: number) => ReturnType<R>>(handle: R) =>
原则上,我有以下菜单:
项目1(编号1涂成橙色)具有以下路径:http://localhost:8080/#/documents
项目2(2号漆成橙色)具有以下路径:
http://localhost:8080/#/documents/1
以及具有以下路径的项目3(涂成橙色的编号3):
http://localhost:8080/#/documents/2
例如,当我单击项目2时,用蓝色框标记的组合框应设置为默认值,表中的项目应按此值过滤,如以下屏幕截图所示:
所以我想要的是,当我点击项目1
以下代码:
export type Mixin<T extends any, Y extends string> = { [P in keyof T & string as `${Y}_${P}`]: T[P] };
有人知道原因是什么吗?似乎找不到解决方案,解决方案是动态定义属性(意味着定义JS代码),另外,我必须手动定义TS属性,使用我想要“动态”定义的实际函数类型,所以这是一个动态静态解决方案,但我只找到了这些。
代码可以在这里找到:TS确实会发疯,但我无法识别这部分
标签: Typescript
Azure
azure-storageazure-authenticationfront-end-optimization
我有一个typescript应用程序,我需要从该应用程序连接到Azure blob存储。我已将blob连接字符串详细信息放置在Azure key vault服务中。但要调用密钥库URL来访问这些密钥和机密,我需要在我的Typescript页面中包含客户端ID和客户端机密。
但作为首页,任何人都可以从浏览器控制台看到这些秘密。
我们怎样才能摆脱这种局面。
下面的任何一个解决方案都可以解决我的问题。请告诉我们
1.是否有任何方法可以从浏览器控制台窗口隐藏这些秘密。所以它在浏览器中不可见
2.是否有任
我想调用一个只有对象作为参数的函数。此对象可以是两个发生冲突的不同接口(1+属性具有相同的键,但可能的值不同)
在我的主函数中,如果对象中的类型值为iffoo,我想调用getFoo;如果对象中的类型值为ifbar,我想调用getBar
interface Foo {
title: string
number: 1 | 2
}
interface FooWithType extends Foo {
type: 'foo'
}
interface Bar {
title: stri
我没听懂,请给我解释一下。当我们用LET-ok输入void时,我得到了
但是,当我们在此处键入示例时:
let foo: void;
foo = 2;
无论如何,我会得到“嗨”。为什么?我在试图理解时有点困惑
我没听懂,请给我解释一下。当我们用LET-ok输入void时,我得到了
但是如果我在头脑中正确地解析它,问题的后半部分将void显示为函数的返回类型(在这种情况下,为nothing),而问题的前半部分显示一个void变量,Typescript只允许将null或未定义的作为赋值
第二部分工
我正在尝试提取泛型的类型,但无法访问它。所以我不能使用提取
从“@expo/vector icons”导入{Feather}
//类型如下,但未导出
常量羽毛:图标
// ... 如何获取图标列表枚举?
我正在尝试使用“crosshair”|“database”|“disc”|“zap”…
我也试过这个
type TypeOfFeather=typeof羽毛
type extractGeneric=T扩展TypeOfFeather?X:从来没有
这显然不起作用,因为TypeOfFeather
我对TypeScript相当陌生,我想在创建一个非常简单的Discord机器人的同时学习该语言,使用一个名为的模块。
我的问题是,我想扩展它们的类,并添加我自己的方法和对象,以便在名为myClient
我的目录树(不包括/dist)
@types/index.d.ts
import { Client, Message, PermissionString, TextChannel, VoiceConnection, Collection, ClientOptions } from "di
我目前正在进行vscode扩展
目前,我正在从工作区文件夹中检索所有.h文件。我希望用户能够选择他想要的.h,并且可以像下图中那样选择它,但是使用之前检索到的.h:
你知道怎么做吗?或者此功能的名称,以便我可以参考文档,因为我找不到它的名称。我找到了答案,如果有人有与我相同的问题,我将其张贴在这里
let items: vscode.QuickPickItem[] = [
{
label: "Test1 Label",
descr
1 2 3 4 5 6 ...
下一页 最后一页 共 812 页