Неявные типы Typescript (любые неявные) - PullRequest
0 голосов
/ 11 декабря 2019

В проекте Typescript, над которым я работал, к которому у меня больше нет доступа, я помню, как я мог делать следующее:

const fn = string => console.log(string)

Будучи новичком в Typescript, он казалсяэквивалентно написанию этого:

const fn = (string:string) => console.log(string)

По сути, на мой взгляд, если бы я назвал переменную в функции в честь нативного типа, казалось бы, что он неявно типизируется как этот тип, а не как any.

В то время я был новичком в Typescript, хотя вполне возможно, что что-то действительно происходило, и я просто неверно истолковал ситуацию.

Теперь, когда я пытаюсь настроить свой собственныйЯ хотел бы настроить его так, чтобы эта функциональность снова была доступна. Я не уверен, как, хотя или если то, о чем я думаю, является даже реальной функцией Typescript.

Является ли это реальной функцией в Typescript?

Если это так, как мне это сделать? настроить Typescript для этого?

Ответы [ 2 ]

3 голосов
/ 11 декабря 2019

В принципе, на мой взгляд, если бы я назвал переменную в функции в честь нативного типа, казалось бы, что она неявно будет напечатана как этот тип, а не как any.

Это совершенно неправильно. Машинопись не имеет такой функции. Если вы не упомянули тип, Typescript будет просто рассматривать его как any. То же самое происходит в коде ниже.

const fn = string => console.log(string)

string переменная имеет тип any. Если у вас есть современная IDE, она будет показывать вам то же самое, если вы наведите на нее курсор.

enter image description here

Чтобы придать ему тип, вы должны специальноупомяните тип, как в последнем коде, который вы добавили.

const fn = (string:string) => console.log(string)

enter image description here

Это реальная функция в Typescript?

Если это так, как мне настроить Typescript для этого?

Это не так, и поэтому вы не можете настроить его для нормальной работы.

1 голос
/ 11 декабря 2019

Ближайшая особенность к тому, что вы описываете, называется Контекстная типизация или Вывод типа . Вы можете найти его в документации TypeScript для получения более подробной информации .

Что касается приведенного вами примера, стандартное (узловое) определение console.log ожидает, что message param длятипа any. Вот почему в этом случае ваш параметр string соответствует типу any.

// src: node_modules/@types/node/globals.d.ts

interface Console {

    // ...

    /**
     * Prints to `stdout` with newline
     */
     log(message?: any, ...optionalParams: any[]): void;

    // ...
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...